2014-07-14 24 views
6

我已經經歷了一些尷尬的間歇錯誤,其中異步方法都返回void而不是任務,因此沒有被期待已久的異步方法。爲了避免將來出現這樣的問題,我試圖創建一個自定義的resharper模式來突出顯示警告等方法。如何配置ReSharper的警告有關返回void

我創建像一個圖案:

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

(其中參數和語句允許每個的數量不受限制,並匹配方法是含有1個或多個合法的標識符字符的標識符)

奇怪這個亮點所有的void方法而不僅僅是異步void方法。任何人都能看到我的錯誤?由於它似乎是一種嘗試匹配的常見模式,而谷歌不會報告它,所以我懷疑它是否是Reshaper 8.2.1中的一個突出問題。

P.S.我知道我的模式將不匹配泛型方法 - 如果我能得到它非一般的人工作,我以後會解決這個問題了)

UPDATE

正如我知道有意見強調這個規則不會處理的一些誤報和誤報。我在這裏關心的是如何獲得異步匹配以在resharper中工作 - 一旦我能夠使規則更加精確,我就可以看到這一點。

+0

如果'$ methodname $'需要'await'方法調用該怎麼辦? – 48klocs

+1

如果我的問題不明確,我很抱歉,這些方法引起的錯誤是因爲我想找到的方法確實是異步的,需要等待。解決方法是使方法返回任務,並因此鼓勵/警告呼叫者等待其完成。幾乎所有的異步方法都應返回任務或任務。 – Typhlosaurus

+3

儘管如此,這將無法解釋真正應該是「異步無效」的頂級事件處理程序。它也不會解決異步lambda,這在我的經驗中是無意的'async void'方法的最可能的原因。 – Servy

回答

4

你不能這樣做。 Resharper的自定義模式顯然工作的方式還不明白async關鍵字(這就是爲什麼它突出顯示所有無效返回方法,而不僅僅是async)。您還可以看到this example,它與async和非async方法都匹配。

什麼你可以要做的就是嘗試通過搜索與「異步」結尾的方法名稱找到async方法,像:

async void $method$($parameters$) 
{ 
    $statements$ 
} 

凡方法標識符是由這個正則表達式定義:\b\w+(Async)\b

這將允許您替換此:

void RunAsync() // or async void RunAsync() 
{ 
    ... 
} 

有了這個:

async Task RunAsync() 
{ 
    ... 
} 
+0

謝謝,這是有幫助的,並證實了我的懷疑。我將添加基於名稱的模式並查看它是如何發生的。 – Typhlosaurus

4

我們在我們的項目中使用免費的ReCommended Extension進行「異步無效」分析。該擴展突出了異步無效的不恰當用法,並提供了明顯的快速修復。

分析規則說明如下:ReCommended-Extension wiki