Partilhar via


CA2247: Argumento passado para TaskCompletionSource construtor deve ser TaskCreationOptions enum em vez de TaskContinuationOptions enum

Propriedade valor
ID da regra CA2247
Título O argumento passado para o construtor TaskCompletionSource deve ser enum TaskCreationOptions em vez de enum TaskContinuationOptions
Categoria Utilização
A correção causa interrupção ou não Ininterrupto
Habilitado por padrão no .NET 10 Como aviso
Línguas aplicáveis C# e Visual Basic

Motivo

Construindo um System.Threading.Tasks.TaskCompletionSource com um System.Threading.Tasks.TaskContinuationOptions valor de enum em vez de um System.Threading.Tasks.TaskCreationOptions valor de enum. Usando o método System.Object.ReferenceEquals para testar a igualdade de um ou mais tipos de valor.

Descrição da regra

O tipo TaskCompletionSource tem um construtor que aceita um System.Threading.Tasks.TaskCreationOptions valor enum e outro construtor que aceita um Object. Passar acidentalmente um valor de enum System.Threading.Tasks.TaskContinuationOptions em vez de um valor de enum System.Threading.Tasks.TaskCreationOptions resultará na chamada do construtor baseado em Object: ele compilará e executará, mas não terá o comportamento pretendido.

Como corrigir violações

Para corrigir a violação, substitua o valor de System.Threading.Tasks.TaskContinuationOptions enum pelo valor de enum correspondente System.Threading.Tasks.TaskCreationOptions .

// Violation
var tcs = new TaskCompletionSource<int>(TaskContinuationOptions.RunContinuationsAsynchronously);

// Fixed
var tcs = new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously);

Quando suprimir avisos

Uma violação dessa regra quase sempre destaca um bug no código de chamada, de modo que o código não se comportará como o desenvolvedor pretendia, com o TaskCompletionSource efetivamente ignorando a opção especificada. O único momento em que é seguro suprimir o aviso é se o desenvolvedor realmente pretendia passar uma caixa System.Threading.Tasks.TaskContinuationOptions como o argumento de estado do objeto para o TaskCompletionSource

Suprimir um aviso

Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar a regra.

#pragma warning disable CA2247
// The code that's violating the rule is on this line.
#pragma warning restore CA2247

Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none no arquivo de configuração.

[*.{cs,vb}]
dotnet_diagnostic.CA2247.severity = none

Para desativar toda essa categoria de regras, defina a severidade da categoria como none no arquivo de configuração.

[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Usage.severity = none

Para obter mais informações, consulte Como suprimir avisos de análise de código.

Consulte também