在 C# 5 引入异步编程的asyncandawait模型后,C# 社区达成了命名约定,为返回可等待类型的方法添加“Async”后缀,如下所示:
interface Foo
{
Task BarAsync();
}
Run Code Online (Sandbox Code Playgroud)
许多静态代码分析器(基于 Roslyn 和非基于 Roslyn 的)已经被编写为在检测异步编程的代码异味时依赖于这个命名约定。
现在 C# 8 引入了异步可枚举的概念,它们本身不可等待但可以与 结合使用await foreach,命名方法返回似乎有两种选择IAsyncEnumerable:
interface Foo
{
// No "Async" suffix, indicating that the return value is not awaitable.
IAsyncEnumerable<T> Bar<T>();
}
Run Code Online (Sandbox Code Playgroud)
或者
interface Foo
{
// With "Async" suffix, indicating that the overall logic is asynchronous.
IAsyncEnumerable<T> BarAsync<T>();
}
Run Code Online (Sandbox Code Playgroud)
是否有关于上述选项的明确命名约定指南(来自 C# 语言团队、.NET 基金会或其他权威机构),例如 C# 5 命名约定如何明确标准化而不是留给程序员基于意见的判断?
没有比 .NET 团队已经做的更好的指导方针了:
IAsyncEnumerable<T> IAsyncEnumerable通过调用AsAsyncEnumerable()返回结果IAsyncEnumerablesSystem.Linq.Async保留其名称。没有SelectAsync或SelectAsAsyncEnumerable,只有Select。在所有情况下,很清楚该方法的结果是什么。在所有情况下,方法的结果都需要等待await foreach才能使用。
所以真正的指导方针保持不变 -确保名称使行为清晰:
AsAsyncEnumerable()或ToAsyncEnumerable(),则无需添加任何后缀。Async后缀以便开发人员知道他们需要await foreach结果。代码分析器和生成器并不真正关心方法的名称,它们通过检查代码本身来检测气味。代码分析器会告诉你,你忘了等待任务或await foreach一个IAsyncEnumerable无论你如何调用的方法和变量。生成器可以简单地使用反射来检查IAsyncEnumerable和发出await foreach
它是检查名称的样式分析器。他们的工作是确保代码使用一致的风格,以便开发人员能够理解代码。样式分析器会告诉您某个方法不遵循您选择的样式。这种风格可能是团队的或普遍接受的风格指南。
当然,每个人都知道私有实例字段的通用前缀是_:)
| 归档时间: |
|
| 查看次数: |
784 次 |
| 最近记录: |