次の方法で共有


CA1849: 非同期メソッド内では非同期メソッドを呼び出す

プロパティ
ルール ID CA1849
Title 非同期メソッド内で非同期メソッドを呼び出す
[カテゴリ] パフォーマンス
修正が破壊的か非破壊的か なし
.NET 10 で既定で有効 いいえ
該当する言語 C# と Visual Basic

原因

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

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

関連項目