许多文章(例如,本篇文章)都说ASP.NET(MVC)中的异步方法的优点是它们允许将线程释放到线程池中,从而可以处理其他请求。如果异步方法不使用线程池线程,那么它们在哪里执行,为什么执行?
主要使用async
在这种情况下是要等待外部资源-例如,数据库(SQL或无-SQL),网络的API(HTTP)等没有线程需要这些,因为它们不是基于CPU的运算。数据可用后,工作会在某个时间点恢复。考虑:
var cust = await someApi.GetCustomerAsync();
var account = await anotherApi.GetAccount(cust.AccountId);
return View(account);
在await
这里所代表的进程外的工作-通常是网络。它们不会在任何地方“运行”,因为它们不是CPU操作。当占位任务报告完成,则该方法的下一部分可以恢复,通常通过所捕获的同步上下文。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句