CA2012: ValueTask を正しく使用する必要があります
プロパティ | 値 |
---|---|
ルール ID | CA2012 |
Title | ValueTask を正しく使用する必要があります |
[カテゴリ] | 信頼性 |
修正が中断ありか中断なしか | なし |
.NET 9 では既定で有効 | 提案として |
原因
メンバーの呼び出しから返された ValueTask インスタンスが、例外、破損、またはパフォーマンスの低下を招く可能性のある方法で使用されています。
規則の説明
メンバーの呼び出しから返される ValueTask インスタンスは、直接待機する必要があります。 ValueTask を複数回使用しようとするか、完了が判明する前に結果に直接アクセスしようとすると、例外または破損が発生する可能性があります。 このような ValueTask を無視することは、機能的なバグを示していることが多く、パフォーマンスを低下させる可能性があります。
違反の修正方法
通常、ValueTasks は、破棄したり、ローカル変数やフィールドなどの他の場所に格納したりせずに、直接待機する必要があります。
どのようなときに警告を抑制するか
任意のメンバー呼び出しから返される ValueTask
オブジェクトの場合、呼び出し元は、ValueTask
を 1 回しか使用できないことを想定している (たとえば、待機している) 必要があります。 ただし、開発者が呼び出されているメンバーを制御し、その実装について完全な知識を有している場合、その開発者は、戻り値の ValueTask
が常に Task オブジェクトをラップしている場合など、警告を抑制しても安全であると認識する場合があります。
警告を抑制する
単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。
#pragma warning disable CA2012
// The code that's violating the rule is on this line.
#pragma warning restore CA2012
ファイル、フォルダー、またはプロジェクトの規則を無効にするには、構成ファイルでその重要度を none
に設定します。
[*.{cs,vb}]
dotnet_diagnostic.CA2012.severity = none
詳細については、「コード分析の警告を抑制する方法」を参照してください。
関連項目
.NET