Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
| 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.