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

Se även