Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
| Egenskap | 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 antingen invasiv eller icke-invasiv | Oumbrytbar |
| Aktiverad som standard i .NET 10 | Som varning |
| Tillämpliga språk | C# och Visual Basic |
Orsak
Konstruera en System.Threading.Tasks.TaskCompletionSource med ett System.Threading.Tasks.TaskContinuationOptions uppräkningsvärde istä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 System.Threading.Tasks.TaskCreationOptions uppräkningsvärde, och en 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 passera ett boxat System.Threading.Tasks.TaskContinuationOptions som objekttillståndsargument 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..