Partilhar via


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

Property 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 está quebrando ou não quebrando Sem quebra
Habilitado por padrão no .NET 8 Como aviso

Motivo

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

Descrição da regra

O tipo TaskCompletionSource tem um construtor que aceita um valor enum e outro construtor que aceita um System.Threading.Tasks.TaskCreationOptionsObject. Passar acidentalmente um valor enum em vez de um System.Threading.Tasks.TaskContinuationOptionsSystem.Threading.Tasks.TaskCreationOptions valor enum resultará em chamar o construtor -based: ele compilará e executará, mas não terá o Objectcomportamento pretendido.

Como corrigir violações

Para corrigir a violação, substitua o valor de enum pelo valor de System.Threading.Tasks.TaskContinuationOptions 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 para um arquivo, pasta ou projeto, defina sua severidade 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