在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基金会或其他权威机构)关于上述选项,就像C# 5的命名约定一样明确地标准化,不留给程序员基于观点的判断?
IAsyncEnumerable
的方法,例如ChannelReader.ReadAllAsync。在其他情况下,例如在EF Core中,使用AsAsyncEnumerable()
已经很清楚了。 - Panagiotis Kanavos