5
C#中异步/等待用法的准则是否与好的架构和抽象分层的概念相矛盾?
这个问题与C#语言有关,但我希望它涵盖其他语言,例如Java或TypeScript。 Microsoft建议在.NET中使用异步调用的最佳做法。在这些建议中,让我们选择两个: 更改异步方法的签名,以便它们返回Task或Task <>(在TypeScript中,这将是Promise <>) 更改异步方法的名称以xxxAsync()结尾 现在,当用异步组件替换低级同步组件时,这会影响应用程序的整个堆栈。由于异步/等待仅在“一直使用”时才有积极影响,因此这意味着必须更改应用程序中每一层的签名和方法名称。 好的体系结构通常涉及在每个层之间放置抽象,这样高层组件就看不到用其他组件替换低层组件。在C#中,抽象采用接口的形式。如果我们引入了一个新的,低级的异步组件,则调用堆栈中的每个接口都需要修改或替换为一个新接口。在实现类中解决问题(异步或同步)的方式不再对调用方隐藏(抽象)。调用者必须知道它是同步还是异步。 异步/等待与“良好架构”原则相抵触的最佳做法吗? 这是否意味着每个接口(例如IEnumerable,IDataAccessLayer)都需要它们的异步对应项(IAsyncEnumerable,IAsyncDataAccessLayer),以便在切换到异步依赖项时可以在堆栈中对其进行替换? 如果我们进一步推论这个问题,那么假设每个方法都是异步的(返回Task <>或Promise <>),并且使方法在实际上不是实际的情况下同步,会不会更简单?异步?这是将来的编程语言所期望的吗?
103
c#
architecture
async