Share via


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

Zie ook