プロパティ | 価値 |
---|---|
ルール識別子 | 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
詳細については、「コード分析の警告を抑制する方法」を参照してください。
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET