c# - "Async All the Way Down": Well, 底部到底是什么?

标签 c# .net asynchronous async-await

<分区>

我正在尝试完全理解 async-await,而我的理解中的差距之一是了解什么是“All the Way Down”。我创建了一个 async 方法,它被另一个 async 方法调用,等等,一直到我用模糊的术语理解的东西,比如“UI”或“一个可以处理多个请求的网络服务器”。我如何用技术术语描述什么是“一直向下”?

让我们以网络服务器的第二个例子为例。假设我有一个像

这样的 Controller 操作
[HttpGet]
public async Task<IHttpActionResult> GetRecords()
{
    var records = await repository.GetRecordsFromDbAsync();
    return Ok(records);
}

在 .NET 源代码中的什么位置可以找到使它能够被异步调用的“一路向下”代码?

最佳答案

“一路向下异步”这个短语有点误导,因为它通常指的是这样一个事实,即一旦你使用了异步方法,你就需要一直向上有异步方法(或返回,取决于您的心理形象)- 从您的异步方法到它的调用者,然后是您的调用者的调用者,依此类推,一直返回。

您的示例显示了一个公开 async 任务的 WebApi/MVC Controller 。 async 链中的下一步是 WebApi/MVC 基础结构,它接收 HTTP GET 请求,将其映射到 Controller ,并将调用分派(dispatch)到 Controller 的方法。此基础设施是 async 感知的,这意味着它知道正确调用 async Controller 方法并 await 它们的结果以返回 HTTP 响应。

至于该基础设施究竟是如何实现的,我不是特别了解,也不关心 - 我知道 ASP.NET 网络服务支持 async Task Controller ,这对我来说已经足够了。

关于c# - "Async All the Way Down": Well, 底部到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41438736/

相关文章:

c# - 如何从 c/cpp 创建 C# 自定义控件

C# 表达式树 - 动态值查找

c# - 自定义异常类

.net - 使用来自 webapi 的 HttpClient 使用 xml

.net - 为 Xamarin 的 Mono Touch/Android 框架编译 AWS SDK (.NET)

javascript - 将 javascript 参数从外部作用域传递到匿名回调函数

c# - 更适合我的任务 : background worker or thread pool?

c# - WPF 数据绑定(bind) TabItem header

c# - WCF 和 IIS 性能使用任务并行库生成数千个任务

javascript - 我可以在 javascript 中强制解决等待结果的 promise 吗?