ReSharper 2026.1 Help

コードインスペクション:「void」を返すデリゲート型で「async」ラムダを使用しないようにしてください

このインスペクションは、非同期コンテキストでの void デリゲートタイプの使用状況を報告します。 ここでの問題は asyncvoid メソッドの場合と同じですが、見つけるのがはるかに困難です。

問題を説明するために、次の方法を考えてみましょう。

public String RunThisAction(Action doSomething) { doSomething(); return "OK"; }

その doSomething パラメーターは Action デリゲート型であり、 void を返します。 このメソッドは、たとえば、同期コンテキストで安全に使用できます。

RunThisAction(() => Console.WriteLine("Test"));

ただし、非同期コンテキストで使用すると、たとえば

RunThisAction(async () => await Task.Delay(1000)); // or RunThisAction(async delegate { await Task.Delay(1000); });

実行時に問題が発生する可能性があります。 例を挙げます。ラムダを展開して例外をスローする場合を考えてみましょう:

RunThisAction(async () => { await Task.Delay(1000); throw new NotImplementedException(); });

doSomething デリゲートは void であるため、例外が呼び出し元のスレッドに影響を与えることはなく、 catch でキャッチされることもありません。

2026 年 6 月 12 日