如何配置resharper以警告返回void的异步方法

时间:2014-07-14 17:20:45

标签: c# resharper async-await

我遇到了一些尴尬的间歇性错误,其中异步方法返回void而不是Task,因此没有等待。为了避免将来出现这样的问题,我正在尝试创建一个自定义的resharper模式,以突出显示警告等方法。

我创建了一个类似的模式:

async void $methodname$($arguments$)
{
$statements$
}

(其中参数和语句允许每个参数和语句不受限制,方法匹配是包含一个或多个合法标识符字符的标识符)

奇怪的是,这突出了所有的void方法,而不仅仅是async void方法。谁能看到我的错误?由于它似乎是一种尝试匹配的常见模式,谷歌没有报告,我怀疑它是否是Reshaper 8.2.1中的一个突出问题。

P.S。我知道我的模式与泛型方法不匹配 - 如果我可以将它用于非泛型方法,我会在以后解决这个问题。

更新

正如评论中所强调的那样,我发现这条规则无法解决许多误报和漏报。我在这里关注的是如何让异步匹配在resharper中工作 - 一旦有效,我可以使规则更精确。

2 个答案:

答案 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