【问题标题】:Where does an async method execute in ASP.NET (MVC)?ASP.NET (MVC) 中的异步方法在哪里执行?
【发布时间】:2014-07-17 14:56:23
【问题描述】:

许多文章(例如this 一篇)说 ASP.NET (MVC) 中异步方法的优点是它们允许将线程释放到线程池,从而允许服务其他请求。如果异步方法不使用线程池线程,它们在哪里执行,为什么?

【问题讨论】:

标签: c# asp.net .net asp.net-mvc


【解决方案1】:

async在这个上下文中的主要用途是等待外部资源——例如,数据库(sql或no-sql)、web APIs(http)等。没有线程必需 对于这些,因为它们不是基于 CPU 的操作。 在数据可用后的某个时间点恢复工作。考虑:

var cust = await someApi.GetCustomerAsync();
var account = await anotherApi.GetAccount(cust.AccountId);
return View(account);

这里的await 代表进程外工作——通常是网络。它们不会在任何地方“运行”,因为它们不是 CPU 操作。当占位符任务报告完成时,然后该方法的下一部分可以恢复,通常通过捕获的同步上下文。

【讨论】:

  • 任何教程或好的帖子链接,我可以在其中学习如何在 mvc 应用程序中使用它
  • OP提到的tutorial似乎很详细。
  • 感谢 Marc,支持并接受为答案。我觉得这不直观,因为我看到它的方式仍然是必须在 somewhere 运行的托管代码,即打开数据库连接等,但是您的答案以及@SriramSakthivel 提供的文章可能会让我信服! :)
  • @martijn_himself 但那时“正在运行”的是什么?当然,在套接字级别有异步 IO 的东西,但这些都是基于回调的,通常是
  • @MarcGravell 啊,我明白了,这很有道理!我开始认为我和其他人可能会在这些概念上遇到困难,因为我没有计算机科学背景,并且对非托管代码/硬件等方面的经验也很少。这让我不止一次认为它不是这样的进入软件开发的好主意:)。
猜你喜欢
  • 2012-07-14
  • 2017-09-20
  • 1970-01-01
  • 1970-01-01
  • 2015-09-20
  • 2015-07-05
  • 1970-01-01
  • 2018-01-07
  • 1970-01-01
相关资源
最近更新 更多