CA2012: Verwenden Sie ValueTasks ordnungsgemäß.
Eigenschaft | Wert |
---|---|
Regel-ID | CA2012 |
Titel | Verwenden Sie ValueTasks ordnungsgemäß. |
Kategorie | Zuverlässigkeit |
Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
Standardmäßig in .NET 9 aktiviert | Als Vorschlag |
Ursache
Eine ValueTask-Instanz, die von einem Member-Aufruf zurückgegeben wird, wird auf eine Weise verwendet, die zu Ausnahmen, Beschädigungen oder einer schlechten Leistung führen kann.
Regelbeschreibung
ValueTask-Istanzen, die von Member-Aufrufen zurückgegeben werden, müssen direkt erwartet werden. Alle Versuche, einen ValueTask mehrmals zu verwenden oder direkt auf ein Ergebnis zuzugreifen, bevor es als abgeschlossen bezeichnet wird, können zu einer Ausnahme oder Beschädigung führen. Das Ignorieren eines solchen ValueTask ist wahrscheinlich ein Hinweis auf einen Funktionsfehler und kann die Leistung beeinträchtigen.
Behandeln von Verstößen
Im Allgemeinen müssen ValueTasks direkt erwartet werden, anstatt verworfen oder an anderen Speicherorten wie lokalen Variablen oder Feldern gespeichert zu werden.
Wann sollten Warnungen unterdrückt werden?
Für ValueTask
-Objekte, die von beliebigen Memberaufrufen zurückgegeben werden, muss der Aufrufer davon ausgehen, dass der ValueTask
nur einmal (z. B. erwartet) verarbeitet werden muss. Wenn Entwickler*innen jedoch auch den aufgerufenen Member steuern und umfassende Kenntnisse über die Implementierung haben, wissen sie möglicherweise, dass es sicher ist, die Warnung zu unterdrücken, z. B. wenn der zurückgegebene ValueTask
immer ein Task-Objekt umschließt.
Unterdrücken einer Warnung
Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.
#pragma warning disable CA2012
// The code that's violating the rule is on this line.
#pragma warning restore CA2012
Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdatei auf none
fest.
[*.{cs,vb}]
dotnet_diagnostic.CA2012.severity = none
Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.