CA2250: ThrowIfCancellationRequested を使用する

プロパティ
ルール ID CA2250
Title ThrowIfCancellationRequested を使用します
[カテゴリ] 使用方法
修正が中断ありか中断なしか なし
.NET 8 では既定で有効 提案として

原因

この規則は、OperationCanceledException をスローする前に IsCancellationRequested をチェックする条件付きステートメントにフラグを設定します。

規則の説明

CancellationToken.ThrowIfCancellationRequested() を呼び出すことで、同じことを実現できます。

違反の修正方法

違反を修正するには、条件付きステートメントを ThrowIfCancellationRequested() の呼び出しに置き換えます。

using System;
using System.Threading;

public void MySlowMethod(CancellationToken token)
{
    // Violation
    if (token.IsCancellationRequested)
        throw new OperationCanceledException();

    // Fix
    token.ThrowIfCancellationRequested();

    // Violation
    if (token.IsCancellationRequested)
        throw new OperationCanceledException();
    else
        DoSomethingElse();

    // Fix
    token.ThrowIfCancellationRequested();
    DoSomethingElse();
}
Imports System
Imports System.Threading

Public Sub MySlowMethod(token As CancellationToken)

    ' Violation
    If token.IsCancellationRequested Then
        Throw New OperationCanceledException()
    End If

    ' Fix
    token.ThrowIfCancellationRequested()

    ' Violation
    If token.IsCancellationRequested Then
        Throw New OperationCanceledException()
    Else
        DoSomethingElse()
    End If

    ' Fix
    token.ThrowIfCancellationRequested()
    DoSomethingElse()
End Sub

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

この規則による警告は抑制しても問題ありません。

警告を抑制する

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

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

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

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

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

こちらもご覧ください