C# - API 是否应该有 "async"修饰符?

标签 c# asynchronous

我一直在搜索和搜索,但无法在 .NET 库和框架中找到任何带有“async”修饰符且被视为 API 的方法。

我已经看到它在他们的代码中被使用,但它并没有被“暴露”。

然后我想到了另一个问题,我们应该公开“异步 API 方法”,还是只将 API 公开为任务。我认为答案是后者,但也许有人可以向我展示一个不是的情况。

我也不记得是在哪里读到的,但我确定我是在什么地方读到的。

最佳答案

async是一个实现细节。

方法的签名只是一个返回Task的方法。或 Task<T> .

所有这些async所做的是更改您可以方法中编写的 C# 变体。它对调用代码完全不可见。

这就是为什么您不允许声明async的原因在接口(interface)成员上——它是一个实现细节,而接口(interface)没有实现,这没有意义。

因此,您在 re: API 中做出的决定是您希望您的方法返回的内容。如果是 TaskTask<T>完全由您决定是否实现该方法 async或不,您稍后可以自由更改该决定(稍后添加 async 不会更改方法签名 - 这不是重大更改)


对于其他 API 考虑因素,您可能希望引用 Stephen Toub 的两篇文章 Should I expose asynchronous wrappers for synchronous methods?Should I expose synchronous wrappers for asynchronous methods? .对两者的简短回答是否定的。

关于C# - API 是否应该有 "async"修饰符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44298844/

相关文章:

c# - 在 CSV 文件中编写 C# 对象列表

c# - 如何最小化序列化数据的大小

c# - 异步/等待和多处理

javascript - 在 Knockout.js 中异步应用绑定(bind)

c# - ReportViewer 2010 不刷新异步回发

c# - 由于加载时未触发 NewDocument 事件,如何处理 Word DocumentChange 事件

c# - 增加 TCP/IP 窗口大小

c# - 使用 HttpClient 的进度信息

Android Retrofit 2 等待多个请求

javascript - 初学者在javascript中异步值传递和返回