我试图理解为什么以及何时应该使用async
控制器动作。最终,当我使用await
其中,它将等待操作完成才能返回视图。
例如
public async Task<ActionResult> TryMe()
{
await SomeActionAsync();
return View();
}
在这种情况下,如果我使用async
或不使用async
, the Action将花费相同的时间来执行。
如果我不尝试并行运行至少 2 个缓慢的操作(彼此不依赖),我认为没有任何理由使用async
控制器动作。
如果我错了,请纠正我。我想我在这里遗漏了一些东西。
要点是await
关键字是让你与异步操作无需编写丑陋的回调。
使用异步操作有助于避免浪费线程池线程。
解释
ASP.Net 在托管线程池中的线程中运行所有代码。
如果同时运行太多慢速请求,线程池将变满,新请求将需要等待线程释放。
然而,您的请求通常很慢,并不是因为它们正在执行计算(计算密集型),而是因为它们正在等待其他内容,例如硬盘、数据库服务器或外部 Web 服务(IO 或网络) -边界)。
仅仅为了等待外部操作完成而浪费宝贵的线程池线程是没有意义的。
异步操作允许您启动操作,将线程返回到池中,然后在操作完成时在不同的线程池线程上“唤醒”。
当操作运行时,不会消耗任何线程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)