c# - 异步方法在 ASP.NET (MVC) 中的何处执行?

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

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

最佳答案

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

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

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

关于c# - 异步方法在 ASP.NET (MVC) 中的何处执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23910701/

相关文章:

c# - 使用 EF 向表中添加新行时违反主键约束

c# - 如何使用 System.Text.Json 将所有 `Nullable<T>` 值类型的空字符串反序列化为空值?

c# - 如何使用简单注入(inject)器在自定义 ClaimsPrincipal 中注入(inject)服务

c# - 通过 Fluent API 的 EF Core 外键

c# - 在 ASP.NET Web 表单中从 LocalDB 检索数据

.net - ClickOnce - 客户要求

c# - 与 C# 不同的 Java 数字签名

c# - 如何在我的网页上只打印图像?

c# - 如何从 Web 处理程序中的全局类访问自定义字段?

C# 2.0 代码使用使用 C# 3.0 编译的程序集