ASP.NET MVC4异步控制器 - 为什么要使用?

Dor*_*orR 34 asp.net asynchronous task-parallel-library async-await asp.net-mvc-4

我试图理解为什么以及何时应该使用async控制器操作.最终,当我await在其中使用时,它将等待操作完成以返回视图.

例如

public async Task<ActionResult> TryMe()
{
   await SomeActionAsync();
   return View();
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果我使用async或不使用async,则Action将花费相同的时间来执行.

如果我没有尝试并行运行至少2个慢速操作(并非彼此依赖),我认为没有任何理由使用async控制器操作.

如果我错了,请纠正我.我想我在这里遗漏了一些东西.

SLa*_*aks 50

该点await的关键字就是让你一起工作的异步操作,而无需编写丑陋的回调.

使用异步操作有助于避免浪费线程池线程.

说明

ASP.Net在托管线程池的线程中运行所有代码.
如果您一次运行太多慢速请求,则线程池将变满,新请求将需要等待线程获得空闲.

但是,您的请求通常很慢,不是因为它们正在进行计算(计算限制),而是因为它们正在等待其他内容,例如硬盘,数据库服务器或外部Web服务(IO或网络) -界).

浪费一个珍贵的线程池线程,等待外部操作完成是没有意义的.

异步操作允许您启动操作,将线程返回到池,然后在操作完成时在另一个线程池线程上"唤醒".
操作正在运行时,不会消耗任何线程.

  • 史蒂夫·桑德森(Steve Sanderson)发表了一篇精彩的演讲,展示了ASP.NET中的异步功能:http://channel9.msdn.com/Events/TechDays/Techdays-2012-the-Netherlands/2287此演示文稿还清楚地显示了性能优势可能来自使用异步方法. (9认同)