CA2008:TaskScheduler を渡さずにタスクを作成しない

プロパティ
ルール ID CA2008
Title TaskScheduler を渡さずにタスクを作成しない
[カテゴリ] 信頼性
修正が中断ありか中断なしか なし
.NET 8 では既定で有効 いいえ

原因

タスクの作成または継続の操作で、TaskScheduler パラメーターを指定しないメソッド オーバーロードを使用しています。

規則の説明

次の .NET タスクの作成および継続メソッドには、TaskScheduler インスタンスを指定または省略するためのオーバーロードがあります。

常に TaskScheduler 引数を明示的に指定することで、動作が呼び出し元によって定義され、実行時に変化する可能性のある既定の Current 値を回避します。 Current は、そのスレッドで現在実行されている Task に関連付けられているスケジューラを返します。 そのようなタスクがない場合は、スレッド プールを表す Default が返されます。 Current を使用すると、スレッド プールでタスクを作成するはずだったのに UI スレッドに戻るのを待っているなど、場合によっては、デッドロックや UI の応答性に関する問題が発生する可能性があります。

詳細情報および具体的な例については、「.NET Framework 4.5 の新しい TaskCreationOptions および TaskContinuationOptions」を参照してください。

違反の修正方法

違反を修正するには、TaskScheduler を受け取って Default または Current で明示的に渡すメソッド オーバーロードを呼び出し、意図を明確にします。

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

この警告は、主に任意の環境でコードを実行するライブラリ、および環境、メソッドの呼び出し元が呼び出す方法、または待機方法についてコードが想定しないライブラリを対象としています。 ライブラリ コードではなく、アプリケーション コードを表すプロジェクトでは、警告を抑制するのが妥当な場合があります。

警告を抑制する

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

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

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

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

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

関連項目