CA2247: O argumento passado para o construtor TaskCompletionSource deve ser a enumeração TaskCreationOptions em vez da enumeração TaskContinuationOptions
Property | Valor |
---|---|
ID da regra | CA2247 |
Título | O argumento passado para o construtor TaskCompletionSource deve ser a enumeração TaskCreationOptions em vez da enumeração TaskContinuationOptions |
Categoria | Usage |
Correção interruptiva ou sem interrupção | Sem interrupção |
Habilitado por padrão no .NET 8 | Como aviso |
Causa
Construindo um System.Threading.Tasks.TaskCompletionSource
com um valor de enumeração System.Threading.Tasks.TaskContinuationOptions em vez de um valor de enumeração System.Threading.Tasks.TaskCreationOptions.
Usando o método System.Object.ReferenceEquals para testar um ou mais tipos de valor para igualdade.
Descrição da regra
O tipo TaskCompletionSource tem um construtor que aceita um valor de enumeração System.Threading.Tasks.TaskCreationOptions e outro construtor que aceita um Object. Passar acidentalmente um valor de enumeração System.Threading.Tasks.TaskContinuationOptions em vez de um valor de enumeração System.Threading.Tasks.TaskCreationOptions resultará em chamar o 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 da enumeração System.Threading.Tasks.TaskContinuationOptions pelo valor de enumeração System.Threading.Tasks.TaskCreationOptions correspondente.
// 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 ignorando efetivamente a opção especificada. A única vez que é seguro suprimir o aviso é se o desenvolvedor realmente pretender passar um argumento de estado de objeto em caixa System.Threading.Tasks.TaskContinuationOptions para o TaskCompletionSource
Suprimir um aviso
Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar 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 em um arquivo, uma pasta ou um projeto, defina a severidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA2247.severity = none
Para desabilitar 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.