次の方法で共有


CA2025: 'IDisposable' インスタンスを未承認のタスクに渡さないでください

プロパティ 価値
ルール識別子 CA2025
タイトル 'IDisposable' インスタンスを未承認のタスクに渡さないでください
カテゴリ 確実
修正が破壊的であるか非破壊的であるか なし
.NET 10 で既定で有効になっている いいえ

原因

IDisposable インスタンスは、未確認のタスクに渡され、そのインスタンスを使用してタスクが終了する前に破棄される可能性があります。

ルールの説明

IDisposableインスタンスを使用する未確認のタスクでは、破棄後にそれらのインスタンスが長く使用される場合があります。 インスタンスが破棄される前に、それらのインスタンスを使用するタスクが完了していることを確認します。

例示

次のコード スニペット (および Visual Basic に相当するもの) は CA2025 の違反です。

public Task DoSomethingAsync()
{
    // Using statements and using blocks can both be violations.
    using (var disposable = new DisposableThing())
    {
        return DoSomethingInternalAsync(disposable);
    }
}
public async Task DoThingsAsync()
{
    var disposable = new DisposableThing();
    var task = DoSomethingInternalAsync(disposable);
    // More code here.
    dispose.Dispose();
    // It's a violation if arguments are disposed before the task is awaited.
    await task.ConfigureAwait(false);
}

警告を抑制するタイミング

タスクが破棄される前に IDisposable インスタンスの使用が完了することがわかっている場合は、これらの警告を抑制します。

警告を抑制する

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

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

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

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

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