c# - 数据层的异步是否要求整个调用栈也是异步的?

标签 c# .net asynchronous architecture async-await

如今,数据层与数据库异步交互很常见:

public async Task<Customer> GetCustomer(int id)
{
  using (db = new AppDbContext())
  {
    return await db.Customers.FindAsync(id);
  }
}

根据我的理解,通过这种技术,所有调用方法,一直到 UI 层,都必须使用 async 关键字进行定义。因此,您最终会得到一个应用程序,其中最终与数据库交互的每个方法或函数都是异步方法。

这看起来非常困惑,并且“污染”了所有应用层,并了解数据层内部的实现细节。

我是不是误解了什么,或者这只是一个人必须要做的事情?

最佳答案

Am I misunderstanding something or is this simply what one has to do?

不,你是对的。这只是您必须做的事情。

This seems terribly messy and "pollutes" all the application layers with knowledge of an implementation detail inside the data layer.

是的,这些实现细节确实泄露了,这很不幸。这就是绝大多数计算机语言如何工作的现实。

我倾向于将 async 细节与 IDisposable 细节进行比较。如果一个类实现了 IDisposable,那么它的包含(拥有)类应该等等。但是一个类是否拥有资源应该确实是一个实现细节。

关于c# - 数据层的异步是否要求整个调用栈也是异步的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41816016/

相关文章:

.net - 请为 .NET 程序员推荐一些很棒的网站

javascript - 如何在React中执行下一个函数之前完成所有的获取?

c# - 自定义 http 服务可以很好地响应本地 IP 地址,但不能响应 localhost 或 127.0.0.1

c# - 从网络复制整个共享目录

c# - 如何将 HashSet<T> 用作字典键?

php - 异步返回的附加属性 :false using jQuery

ios - 从 Swift 函数中的异步调用返回数据

c# - 在不增加字体大小的情况下增加文本框高度

c# - Visual Studio 2010 C# "already defined a member with same parameter types error."

c# - 代码生成 - 领域/模型优先 (DDD)