我遇到了一些尴尬的间歇性错误,其中异步方法返回void而不是Task,因此没有等待。为了避免将来出现这样的问题,我正在尝试创建一个自定义的resharper模式,以突出显示警告等方法。
我创建了一个类似的模式:
async void $methodname$($arguments$)
{
$statements$
}
(其中参数和语句允许每个参数和语句不受限制,方法匹配是包含一个或多个合法标识符字符的标识符)
奇怪的是,这突出了所有的void方法,而不仅仅是async void方法。谁能看到我的错误?由于它似乎是一种尝试匹配的常见模式,谷歌没有报告,我怀疑它是否是Reshaper 8.2.1中的一个突出问题。
P.S。我知道我的模式与泛型方法不匹配 - 如果我可以将它用于非泛型方法,我会在以后解决这个问题。
更新
正如评论中所强调的那样,我发现这条规则无法解决许多误报和漏报。我在这里关注的是如何让异步匹配在resharper中工作 - 一旦有效,我可以使规则更精确。
答案 0 :(得分:4)
你真的不能这样做。 Resharper的自定义模式的工作方式显然还不能理解async
关键字(这就是为什么它突出显示所有返回void的方法,而不仅仅是async
方法)。您还可以看到this example,其中包含async
和非async
方法。
您可以做的是尝试通过搜索以“Async”结尾的方法名称来查找async
方法,如下所示:
async void $method$($parameters$)
{
$statements$
}
方法标识符由此正则表达式定义:\b\w+(Async)\b
这将允许您替换它:
void RunAsync() // or async void RunAsync()
{
...
}
有了这个:
async Task RunAsync()
{
...
}
答案 1 :(得分:4)
我们在项目中使用免费ReCommended Extension用于ReSharper" async void"分析。该扩展突出了异步void的不当用法,并提供明显的快速修复。
此处描述了分析规则:ReCommended-Extension wiki。