CA2247: Argument dat is doorgegeven aan taskcompletionSource-constructor, moet de enum TaskCreationOptions zijn in plaats van taskContinuationOptions-enum
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA2247 |
Titel | Argument dat wordt doorgegeven aan de constructor TaskCompletionSource moet TaskCreationOptions enum zijn in plaats van TaskContinuationOptions enum |
Categorie | Gebruik |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Als waarschuwing |
Oorzaak
Het samenstellen van een System.Threading.Tasks.TaskCompletionSource
met een System.Threading.Tasks.TaskContinuationOptions enum-waarde in plaats van een System.Threading.Tasks.TaskCreationOptions enum-waarde.
Methode System.Object.ReferenceEquals gebruiken om een of meer waardetypen voor gelijkheid te testen.
Beschrijving van regel
Het type TaskCompletionSource heeft een constructor die een System.Threading.Tasks.TaskCreationOptions enum-waarde accepteert en een andere constructor die een Object. Het per ongeluk doorgeven van een System.Threading.Tasks.TaskContinuationOptions enum-waarde in plaats van een System.Threading.Tasks.TaskCreationOptions enum-waarde resulteert in het aanroepen van de Objectop -gebaseerde constructor: deze wordt gecompileerd en uitgevoerd, maar heeft niet het beoogde gedrag.
Schendingen oplossen
Als u de schending wilt oplossen, vervangt u de System.Threading.Tasks.TaskContinuationOptions enum-waarde door de bijbehorende System.Threading.Tasks.TaskCreationOptions enumwaarde.
// Violation
var tcs = new TaskCompletionSource<int>(TaskContinuationOptions.RunContinuationsAsynchronously);
// Fixed
var tcs = new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously);
Wanneer waarschuwingen onderdrukken
Een schending van deze regel markeert bijna altijd een fout in de aanroepende code, zodat de code niet werkt zoals de ontwikkelaar bedoeld, waarbij taskcompletionSource de opgegeven optie effectief negeert. De enige keer dat het veilig is om de waarschuwing te onderdrukken, is als de ontwikkelaar daadwerkelijk bedoeld is om een vak System.Threading.Tasks.TaskContinuationOptions door te geven als het argument objectstatus aan de TaskCompletionSource
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA2247
// The code that's violating the rule is on this line.
#pragma warning restore CA2247
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none
ervan in op het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA2247.severity = none
Als u deze hele categorie regels wilt uitschakelen, stelt u de ernst voor de categorie none
in op in het configuratiebestand.
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Usage.severity = none
Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.