36

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

例如

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

在这种情况下,如果我使用async或不使用asyncAction将需要相同的时间来执行。

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

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

4

1 回答 1

52

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

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

解释

ASP.Net 在托管线程池的线程中运行所有代码。
如果一次运行的慢请求太多,线程池将满,新的请求需要等待线程释放。

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

仅仅为了等待外部操作完成而浪费宝贵的线程池线程是没有意义的。

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

于 2013-03-03T19:56:30.470 回答