コードインスペクション:「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 日