CA2012: Använd ValueTasks korrekt
Property | Värde |
---|---|
Regel-ID | CA2012 |
Title | Använd ValueTasks korrekt |
Kategori | Tillförlitlighet |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Som förslag |
Orsak
En ValueTask instans som returneras från ett medlemsanrop används på ett sätt som kan leda till undantag, skada eller dåliga prestanda.
Regelbeskrivning
ValueTask instanser som returneras från medlemsanrop är avsedda att inväntas direkt. Försök att använda en ValueTask flera gånger eller att direkt komma åt resultatet innan det är känt att det är klart kan leda till ett undantag eller skada. Att ignorera en sådan ValueTask är sannolikt en indikation på en funktionell bugg och kan försämra prestanda.
Så här åtgärdar du överträdelser
I allmänhet bör ValueTasks vara direkt inväntat i stället för att ignoreras eller lagras på andra platser som lokala variabler eller fält.
När du ska ignorera varningar
För ValueTask
objekt som returneras från godtyckliga medlemsanrop måste anroparen anta att ValueTask
måste förbrukas (till exempel inväntas) en gång och bara en gång. Men om utvecklaren även styr medlemmen som anropas och har fullständig kunskap om dess implementering, kan utvecklaren veta att det är säkert att ignorera varningen, till exempel om returen ValueTask
alltid omsluter ett Task objekt.
Ignorera 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 CA2012
// The code that's violating the rule is on this line.
#pragma warning restore CA2012
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.CA2012.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.