Typ*_*rus 7 c# resharper async-await
我遇到了一些尴尬的间歇性错误,其中异步方法返回无效而不是任务,因此没有等待.为了避免将来出现这样的问题,我正在尝试创建一个自定义的resharper模式,以突出显示警告等方法.
我创建了一个类似的模式:
async void $methodname$($arguments$)
{
$statements$
}
Run Code Online (Sandbox Code Playgroud)
(其中参数和语句允许每个的数量不限,方法匹配是包含一个或多个合法标识符的标识符)
奇怪的是,这突出了所有的void方法,而不仅仅是async void方法.谁能看到我的错误?由于它似乎是一种尝试匹配的常见模式,并且谷歌没有报告,我怀疑它是否是Reshaper 8.2.1中的一个突出问题.
PS我知道我的模式与泛型方法不匹配 - 如果我可以让它适用于非泛型方法我稍后会修复它
UPDATE
正如评论中所强调的那样,我意识到这条规则无法处理的许多误报和漏报.我在这里关注的是如何让异步匹配在resharper中工作 - 一旦工作,我可以看看使规则更精确.
你真的不能那样做。Resharper 的自定义模式的工作方式显然还不理解关键字async
(这就是为什么它突出显示所有返回 void 的方法,而不仅仅是那些方法async
)。您还可以看到这个示例,它同时匹配方法async
和非async
方法。
您可以做的是尝试async
通过搜索以“Async”结尾的方法名称来查找方法,如下所示:
async void $method$($parameters$)
{
$statements$
}
Run Code Online (Sandbox Code Playgroud)
其中方法标识符由此正则表达式定义:\b\w+(Async)\b
这将允许您替换它:
void RunAsync() // or async void RunAsync()
{
...
}
Run Code Online (Sandbox Code Playgroud)
有了这个:
async Task RunAsync()
{
...
}
Run Code Online (Sandbox Code Playgroud)