Delen via


CA2012: ValueTasks correct gebruiken

Eigenschappen Weergegeven als
Regel-id CA2012
Titel ValueTasks correct gebruiken
Categorie Betrouwbaarheid
Oplossing is brekend of niet-brekend Niet-brekend
Standaard ingeschakeld in .NET 8 Als suggestie

Oorzaak

Een ValueTask exemplaar dat wordt geretourneerd door een aanroep van een lid, wordt gebruikt op een manier die kan leiden tot uitzonderingen, beschadiging of slechte prestaties.

Beschrijving van regel

ValueTask instanties die worden geretourneerd door lid-aanroepen, zijn bedoeld om direct te worden gewacht. Pogingen om een ValueTask meerdere keren te gebruiken of om rechtstreeks toegang te krijgen tot het resultaat van een waarde voordat bekend is dat het is voltooid, kan leiden tot een uitzondering of beschadiging. Het negeren van een dergelijke ValueTask is waarschijnlijk een indicatie van een functionele bug en kan de prestaties verminderen.

Schendingen oplossen

Over het algemeen moet ValueTasks rechtstreeks worden gewacht in plaats van deze te verwijderen of op te slaan in andere locaties, zoals lokale variabelen of velden.

Wanneer waarschuwingen onderdrukken

Voor ValueTask objecten die worden geretourneerd door willekeurige lid-aanroepen, moet de beller ervan uitgaan dat de ValueTask aanroeper één keer en slechts één keer moet worden verbruikt (bijvoorbeeld in afwachting). Als de ontwikkelaar echter ook het lid beheert dat wordt aangeroepen en volledige kennis van de implementatie heeft, weet de ontwikkelaar mogelijk dat het veilig is om de waarschuwing te onderdrukken, bijvoorbeeld als de retour ValueTask altijd een Task object verpakt.

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 CA2012
// The code that's violating the rule is on this line.
#pragma warning restore CA2012

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

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

Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.

Zie ook