我一直在搜索和搜索,并且无法在.NET库和框架中找到任何具有“async”修饰符的方法,并被视为API。
我已经看到它被用在他们的代码中,但它没有被“暴露”。
然后它又引出了另一个问题,我们是否应该公开“异步API方法”,或者只是将API公开为任务。我认为答案是后者,但也许有人可以告诉我一个不存在的案例。
我也不记得我在哪里读到这篇文章,但我确定我在某处读过这篇文章。
答案 0 :(得分:4)
async
是实施详细信息。
方法的签名只是一个返回Task
或Task<T>
的方法。
async
所做的就是改变你可以在方法中编写的C#变体。调用代码完全不可见。
这就是为什么你不允许在接口成员上声明async
- 它是一个实现细节,接口没有实现,它不会感。
因此,您决定使用re:API是您希望返回的方法。如果它是Task
或Task<T>
,则 39;稍后可以自由更改该决定(稍后添加async
不会更改方法签名 - 它不是一个重大变化)
对于其他API考虑因素,您可以查阅Stephen Toub撰写的题为Should I expose asynchronous wrappers for synchronous methods?和Should I expose synchronous wrappers for asynchronous methods?的一对文章。对这两者的简短回答是否定的。
答案 1 :(得分:2)
.Net Framework公开了使用async
声明的方法。如果他们可以,我说你也可以。
但是说:如果内存服务,使用async
声明的方法与返回Task<>
的方法没有任何不同。我认为C#编译器采用async
方法,并且实际上修改了它,并且编译它就像声明为返回Task<>
一样。
在 public 类上声明为异步的 public 方法的.Net Framework示例:
async
,此类使用Task<String>
覆盖,强调它们是等效的。Task<>
声明,但.Net Framework内部的子类用async
覆盖它们。
Task<>
声明,但.Net Framework内部的子类用async
覆盖它们。
除了公共方法之外,还有许多实例,其中声明了内部方法async
,并且公共方法被声明为返回Task<>
。通常,这些是公共方法执行某些参数检查的地方,然后它调用内部async
方法并返回Task<>
。