创建新线程时,Web API 是否"ApiController"从 ASP.NET 线程池中窃取线程?



据我了解,MVC 专门引入了AsyncController来处理创建新线程时避免从 ASP.NET 线程池中窃取线程的问题。新的 Web API 没有类似的AsyncApiControllerApiController的继承/实现签名也与ControllerAsyncController有很大不同。

问:Web API 是否已处理在创建新线程时避免从 ASP.NET 线程池中窃取线程的问题?我是否错过了一些自动处理此问题的新内容?

供参考:

  • MVC:控制器
  • MVC:异步控制器
  • Web API: ApiController

ApiController实现了IHttpController,并且该接口只定义了一个返回Task的方法(ExecuteAsync),因此这意味着ApiController是异步的。

MVC 在 MVC 2 中引入了 AsyncController 以支持异步方法。使用异步控制器不会使代码神奇地异步。在 MVC 4 中,控制器支持异步方法,因此不需要 AsyncController。异步方法不会将 ASP.NET 或 IIS 线程替换为神奇的轻量级线程 - 执行异步工作时,并不总是使用线程。例如,当您发出异步 Web 服务请求时,ASP.NET 将不会在异步方法调用和 await 之间使用任何线程。 请参阅我的教程在 MVC 4 中使用异步方法 ASP.NET

最新更新