CA2012: ValueTask を正しく使用する必要があります

プロパティ
ルール ID CA2012
Title ValueTask を正しく使用する必要があります
[カテゴリ] 信頼性
修正が中断ありか中断なしか なし
.NET 8 では既定で有効 提案として

原因

メンバーの呼び出しから返された 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

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

関連項目