Share via


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

Se även