C# - API应该是否具有“async”修饰符?

时间:2017-06-01 04:59:47

标签: c# asynchronous

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

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

然后它又引出了另一个问题,我们是否应该公开“异步API方法”,或者只是将API公开为任务。我认为答案是后者,但也许有人可以告诉我一个不存在的案例。

我也不记得我在哪里读到这篇文章,但我确定我在某处读过这篇文章。

2 个答案:

答案 0 :(得分:4)

async实施详细信息。

方法的签名只是一个返回TaskTask<T>的方法。

async所做的就是改变你可以在方法中编写的C#变体。调用代码完全不可见。

这就是为什么你不允许在接口成员上声明async - 它是一个实现细节,接口没有实现,它不会感。

因此,您决定使用re:API是您希望返回的方法。如果它是TaskTask<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<>。通常,这些是公共方法执行某些参数检查的地方,然后它调用内部async方法并返回Task<>