Dela via


CA2025: Skicka inte "IDisposable"-instanser till ouppvakade uppgifter

Fastighet Värde
Regel-ID CA2025
Titel Skicka inte "IDisposable"-instanser till ouppvakade uppgifter
Kategori Tillförlitlighet
Korrigeringen är antingen brytande eller icke-brytande Oskiljbar
Aktiverad som standard i .NET 10 Nej

Orsak

En IDisposable instans skickas till en ouppvakad uppgift och kan tas bort innan aktiviteten är klar med instansen.

Regelbeskrivning

Ouppvakade uppgifter som använder IDisposable instanser kan använda dessa instanser långt efter att de har tagits bort. Se till att uppgifter som använder dessa instanser slutförs innan instanserna tas bort.

Exempel

Följande kodfragment (och deras Visual Basic-motsvarigheter) är överträdelser av 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);
}

När du ska ignorera varningar

Ignorera dessa varningar om du vet att uppgifter slutförs med instanser IDisposable innan de tas bort.

Undertryck en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

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

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

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

Mer information finns i Så här utelämnar du kodanalysvarningar.