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

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

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

这似乎非常困惑,并且在了解数据层内部实现细节的情况下“污染”了所有应用程序层。

我是在误解某件事,还是这仅仅是要做的事情?

最佳答案



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



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

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

09-11 17:36
查看更多