CA1849: 非同期メソッド中の非同期メソッドの呼び出し

プロパティ
ルール ID CA1849
Title 非同期メソッド中の非同期メソッドの呼び出し
[カテゴリ] パフォーマンス
修正が中断ありか中断なしか なし
.NET 8 では既定で有効 いいえ

原因

Async サフィックス付きの同等のものが存在するすべてのメソッドが、Task が返されるメソッドから呼び出されると、この警告が生成されます。 さらに、Task.Wait()Task<T>.ResultTask.GetAwaiter().GetResult() を呼び出すと、この警告が生成されます。

規則の説明

既に非同期であるメソッドでは、他のメソッドの呼び出しはその非同期バージョン (存在する場合) に対して行う必要があります。

違反の修正方法

違反:

Task DoAsync()
{
    file.Read(buffer, 0, 10);
}

修正:

そのメソッドの非同期バージョンを await します。

async Task DoAsync()
{
    await file.ReadAsync(buffer, 0, 10);
}

どのようなときに警告を抑制するか

同期および非同期コード用の 2 つの別個のコード パスがある場合は、if 条件を使用して、この規則による警告を抑制しても問題ありません。 また、Task が解決されたかどうかのチェックがある場合は、同期メソッドおよびプロパティを使用して問題ありません。

警告を抑制する

単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。

#pragma warning disable CA1849
// The code that's violating the rule is on this line.
#pragma warning restore CA1849

ファイル、フォルダー、またはプロジェクトの規則を無効にするには、構成ファイルでその重要度を none に設定します。

[*.{cs,vb}]
dotnet_diagnostic.CA1849.severity = none

詳細については、「コード分析の警告を抑制する方法」を参照してください。

関連項目