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

时间:2012-06-20 18:46:13

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

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

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

供参考:

2 个答案:

答案 0 :(得分:6)

ApiController实现IHttpController,该接口只定义一个返回ExecuteAsync的方法(Task),这意味着ApiController是异步。< / p>

答案 1 :(得分:3)

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