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 9 | 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.