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

时间:2013-03-03 19:54:17

标签: asp.net asynchronous asp.net-mvc-4 task-parallel-library async-await

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

例如

public async Task<ActionResult> TryMe()
{
   await SomeActionAsync();
   return View();
}

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

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

如果我错了,请纠正我。我想我在这里错过了一些东西。

1 个答案:

答案 0 :(得分:50)

await关键字的目的是让您使用异步操作而无需编写丑陋的回调。

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

解释

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

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

浪费一个珍贵的线程池线程,等待外部操作完成是毫无意义的。

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