提问人:Julian 提问时间:11/7/2023 最后编辑:Julian 更新时间:11/9/2023 访问量:106
如何从 .editorconfig 命名规则中排除异步 void 事件处理程序?
How can async void event handlers be excluded from .editorconfig naming rules?
问:
我想实现以下目标:
IDE(例如 Visual Studio)应使用一组规则来确定方法名称是否遵循以下约定,并在发生冲突时发出警告:
- 具有 or 返回类型的 Awaitable、异步方法应接收后缀,例如
Task
Task<T>
Async
public async Task<string> FetchMyStringAsync()
- 不可等待的异步方法以及任何其他同步方法都不应具有此后缀,例如 或
private async void MyEventHandler(object sender, EventArgs args)
public bool IsValid(string input)
通过阅读这篇文章,可以在 .editorconfig 文件中创建命名规则,以便在异步方法在 C# 中没有后缀时获取建议、警告或错误:Async
# Async methods should have "Async" suffix
dotnet_naming_rule.async_methods_end_in_async.symbols = any_async_methods
dotnet_naming_rule.async_methods_end_in_async.style = end_in_async
dotnet_naming_rule.async_methods_end_in_async.severity = suggestion
dotnet_naming_symbols.any_async_methods.applicable_kinds = method
dotnet_naming_symbols.any_async_methods.applicable_accessibilities = *
dotnet_naming_symbols.any_async_methods.required_modifiers = async
dotnet_naming_style.end_in_async.required_prefix =
dotnet_naming_style.end_in_async.required_suffix = Async
dotnet_naming_style.end_in_async.capitalization = pascal_case
dotnet_naming_style.end_in_async.word_separator =
但是,这些规则也适用于签名,例如事件处理程序:async void
private async void OnSomeEventOccured(object sender, EventArgs args)
{
await SomeOperationAsync();
}
private async Task SomeOperationAsync()
{
// do some other asynchronous stuff here...
}
然后编辑会建议更改为 ,这是我不想要的。async void OnSomeEventOccured()
async void OnSomeEventOccuredAsync()
如何更改上述规则集以排除方法签名并仅将其应用于?如果这是不可能的,根据我自己的研究,有没有其他方法可以实现这一目标?async void
async Task
答:
-1赞
wenbingeng-MSFT
11/9/2023
#1
根据代码样式的命名规则,如果我们想指定标准化 async Task 而不是 async void,那么应该指定 dotnet_naming_symbols.any_async_methods.required_modifiers = async Task
但在实际测试中,这样的规范并不真正起作用。它确实忽略了 async void,但异步任务上显示的约束是 CA1822: 将成员标记为静态
我仔细研究了代码样式的命名规则,它解释了原因:
是的,目前支持代码样式的命名规则。
因此,如果可以在 editorconfig 中定义异步方法的命名规则,但不能指定 async void 或 async Task 来执行此操作。
评论
0赞
Julian
11/16/2023
谢谢你的回答。我知道这不是一个修饰符,而是一种类型。虽然这解释了为什么我的配置是这样,但这并不能为我的问题提供解决方案。我很欣赏这种努力,我愿意以不同的方式解决这个问题。Task
评论