JetBrains Rider 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 日