コードインスペクション: 戻り値の型が「void」のメソッドや関数で「async」の使用は避けてください(戻り値の型が「void」で、型「System.EventArgs」のパラメーターを持たないメソッドや関数で「async」を使用しないでください)
このインスペクションは、 async 修飾子が void 戻り型と共に使用されているものの、 System.EventArgs 型のパラメーターを受け入れないメソッドおよび関数を検出します。 これらのメソッドでは、未処理の例外を待機できず、アプリケーションがクラッシュする可能性があるため、このようなメソッドの使用は推奨されません。
public async void Foo(Task<int> task)
{
Process(await task);
}
public void Process(int i) {}
public async void Foo(Task<int> task)
{
try
{
Process(await task);
}
catch (Exception e)
{
throw; // TODO handle exception
}
}
public void Process(int i) {}
このクイックフィックスは、 async void メソッドの本体を try-catch ブロックで囲みます。 これにより、メソッド内でスローされた例外がすべてキャッチされ、アプリケーションをクラッシュさせる可能性のある未処理の例外の発生を防止できます。 アプリケーションの具体的な要件に応じて、 throw; ステートメントをカスタムエラー処理ロジックに置き換えることができます。
この簡単な修正により、例外をキャッチすることで async void メソッドはより安全になりますが、 void が必要なイベントハンドラーなどの特定のシナリオを除き、可能な限り async メソッドの戻り値の型として Task を使用する方が一般的には適切です。
2026 年 6 月 12 日