在C#5引入async
和之后await
用于异步编程模型之后,C#社区达成了一种命名约定,即向返回等待类型的方法添加“ Async”后缀,如下所示:
interface Foo
{
Task BarAsync();
}
从那时起,许多异步代码分析器(基于Roslyn的和基于非Roslyn的)都被编写为在异步编程周围检测代码气味时依赖于此命名约定。
既然C#8引入了异步枚举的概念,它们本身不是可以等待的,但是可以与结合使用await foreach
,似乎有两种方法可以返回命名方法IAsyncEnumerable
:
interface Foo
{
// No "Async" suffix, indicating that the return value is not awaitable.
IAsyncEnumerable<T> Bar<T>();
}
要么
interface Foo
{
// With "Async" suffix, indicating that the overall logic is asynchronous.
IAsyncEnumerable<T> BarAsync<T>();
}
是否有关于上述选项的明确的命名约定准则(来自C#语言团队,.NET Foundation或其他机构),例如C#5命名约定是如何明确标准化的,而不是由程序员根据意见进行判断的?
Async
后缀用于返回的方法IAsyncEnumerable
,例如ChannelReader.ReadAllAsync。在其他情况下,例如,在EF Core AsAsyncEnumerable()
中使用的情况已经很清楚
async
并await
在内部使用),而msdn示例显示了相同的内容