Aracılığıyla paylaş


CA2025: 'IDisposable' örnekleriniwaited görevlere geçirmeyin

Mülkiyet Değer
Kural Kimliği CA2025
Başlık 'IDisposable' örnekleriniwaited görevlere geçirmeyin
Kategori Güvenilirlik
Düzeltme kırılgan mı yoksa sağlam mı Kırılmaz
.NET 10'da varsayılan olarak etkindir Hayı

Nedeni

Örnek IDisposable , örnek kullanılmadan bir göreve geçirilir ve görev örneği kullanılarak tamamlanmadan önce atılmış olabilir.

Kural açıklaması

Örnekleri kullanan IDisposable örneksiz görevler, atıldıktan uzun süre sonra bu örnekleri kullanabilir. Nesneler atılmadan önce bu nesneleri kullanan görevlerin tamamlandığından emin olun.

Örnekler

Aşağıdaki kod parçacıkları (ve Visual Basic eşdeğerleri) CA2025 ihlalleridir:

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);
}

Uyarıların ne zaman bastırılması gerekiyor?

Görevlerin atılmadan önce örnekleri kullanmayı IDisposable bitirdiğini biliyorsanız bu uyarıları gizleyebilirsiniz.

Uyarıyı gizleme

Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.

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

Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için önem derecesiniyapılandırma dosyasında olarak ayarlayın.

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

Daha fazla bilgi için bkz. Kod analizi uyarılarını gizleme.