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.TaskCompletionSource
System.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.