CA2247: Argumentet som skickas till TaskCompletionSource-konstruktorn ska vara TaskCreationOptions-uppräkning i stället för TaskContinuationOptions-uppräkning
Property | Värde |
---|---|
Regel-ID | CA2247 |
Title | Argumentet som skickas till TaskCompletionSource-konstruktorn ska vara TaskCreationOptions-uppräkning i stället för TaskContinuationOptions-uppräkning |
Kategori | Användning |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Som varning |
Orsak
Konstruera en System.Threading.Tasks.TaskCompletionSource
med ett System.Threading.Tasks.TaskContinuationOptions uppräkningsvärde i stället för ett System.Threading.Tasks.TaskCreationOptions uppräkningsvärde.
Använda System.Object.ReferenceEquals metoden för att testa en eller flera värdetyper för likhet.
Regelbeskrivning
Typen TaskCompletionSource har en konstruktor som accepterar ett uppräkningsvärde och en System.Threading.Tasks.TaskCreationOptions annan konstruktor som accepterar en Object. Om du av misstag skickar ett System.Threading.Tasks.TaskContinuationOptions uppräkningsvärde i stället för ett System.Threading.Tasks.TaskCreationOptions uppräkningsvärde anropas den Object-baserade konstruktorn: den kompileras och körs, men den har inte det avsedda beteendet.
Så här åtgärdar du överträdelser
Åtgärda överträdelsen genom att ersätta uppräkningsvärdet System.Threading.Tasks.TaskContinuationOptions med motsvarande System.Threading.Tasks.TaskCreationOptions uppräkningsvärde.
// Violation
var tcs = new TaskCompletionSource<int>(TaskContinuationOptions.RunContinuationsAsynchronously);
// Fixed
var tcs = new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously);
När du ska ignorera varningar
Ett brott mot den här regeln markerar nästan alltid en bugg i den anropande koden, så att koden inte fungerar som den utvecklare avsåg, där TaskCompletionSource effektivt ignorerar det angivna alternativet. Den enda gången det är säkert att ignorera varningen är om utvecklaren faktiskt avsåg att skicka en ruta som objekttillståndsargumentet System.Threading.Tasks.TaskContinuationOptions till TaskCompletionSource
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 CA2247
// The code that's violating the rule is on this line.
#pragma warning restore CA2247
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.CA2247.severity = none
Om du vill inaktivera hela den här regelkategorin anger du allvarlighetsgraden för kategorin till none
i konfigurationsfilen.
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Usage.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar..