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 10 Como aviso

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 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 System.Threading.Tasks.TaskCreationOptions valor enum e outro construtor que aceita um Object. Passar acidentalmente um System.Threading.Tasks.TaskContinuationOptions valor de enum em vez de um System.Threading.Tasks.TaskCreationOptions valor de enum resultará em chamar o Objectconstrutor baseado em -: 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