【问题标题】:Does the Web API "ApiController" steal threads from the ASP.NET thread pool when new threads are created?创建新线程时,Web API“ApiController”是否会从 ASP.NET 线程池中窃取线程?
【发布时间】:2012-06-20 18:46:13
【问题描述】:

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

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

供参考:

【问题讨论】:

    标签: c# asp.net-mvc asynchronous asp.net-web-api


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 从中得到以下答案:“ASP.NET 不会在异步方法调用和等待之间使用任何线程”
      • 这是一个很好的答案,但是关于 Web Api 的问题不是 MVC 4 吗?你能稍微了解一下 Web Api 上下文吗?
      猜你喜欢
      • 2014-09-02
      • 1970-01-01
      • 1970-01-01
      • 2012-06-06
      • 2023-02-02
      • 2015-07-26
      • 2017-08-06
      • 2017-06-26
      • 2020-01-06
      相关资源
      最近更新 更多