Delen via


CA2025: 'IDisposable'-exemplaren niet doorgeven aan niet-ontwaerde taken

Vastgoed Waarde
Regel-ID CA2025
Titel IDisposable-exemplaren niet doorgeven aan niet-geopende taken
Categorie Betrouwbaarheid
De oplossing veroorzaakt brekende of niet-brekende problemen Niet-afbreekbaar
standaard ingeschakeld in .NET 10 Nee.

Oorzaak

Een IDisposable exemplaar wordt doorgegeven aan een niet-geopende taak en mogelijk verwijderd voordat de taak is voltooid met behulp van het exemplaar.

Beschrijving van regel

Niet-verlopen taken die exemplaren gebruiken IDisposable , kunnen deze exemplaren gebruiken lang nadat ze zijn verwijderd. Zorg ervoor dat taken die deze exemplaren gebruiken, zijn voltooid voordat die exemplaren worden verwijderd.

Voorbeelden

De volgende codefragmenten (en hun Visual Basic-equivalenten) zijn schendingen van 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);
}

Wanneer waarschuwingen onderdrukken

Onderdrukt deze waarschuwingen als u weet dat taken klaar zijn met het gebruik van IDisposable exemplaren voordat ze worden verwijderd.

Een waarschuwing onderdrukken

Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.

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

Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst ervan in op none in het configuratiebestand.

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

Zie Hoe u codeanalysewaarschuwingen kunt onderdrukken voor meer informatie.