Bagikan melalui


CA2025: Jangan meneruskan instans 'IDisposable' ke dalam tugas yang tidak diawasi

Harta benda Nilai
Identifikasi Aturan CA2025
Titel Jangan meneruskan instans 'IDisposable' ke dalam tugas yang tidak diawasi
Kategori Keandalan
Perbaikan bersifat merusak atau tidak merusak Tanpa putus
Diaktifkan secara default di .NET 10 Tidak.

Penyebab

Instans IDisposable diteruskan ke tugas yang tidak diawasi dan berpotensi dibuang sebelum tugas selesai menggunakan instans.

Deskripsi aturan

Tugas yang tidak diawasi yang menggunakan IDisposable instans mungkin menggunakan instans tersebut lama setelah dibuang. Pastikan tugas yang menggunakan instans tersebut selesai sebelum instans dibuang.

Contoh

Cuplikan kode berikut (dan setara Visual Basic-nya) adalah pelanggaran 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);
}

Kapan harus menekan peringatan

Tekan peringatan ini jika Anda tahu tugas selesai menggunakan IDisposable instans sebelum dibuang.

Menyembunyikan peringatan

Jika Anda hanya ingin menyembunyikan satu pelanggaran, tambahkan arahan preprosesor pada file sumber Anda untuk menonaktifkan dan kemudian mengaktifkan kembali aturan tersebut.

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

Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none dalam file konfigurasi.

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

Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.