异步方法在ASP.NET(MVC)中的执行位置是什么?

时间:2014-05-28 11:42:21

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

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

1 个答案:

答案 0 :(得分:5)

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

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

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