Compartilhar via


CA2008: Não criar tarefas sem passar um TaskScheduler

Property Valor
ID da regra CA2008
Título Não criar tarefas sem passar um TaskScheduler
Categoria Confiabilidade
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 8 Não

Causa

Uma operação de criação ou continuação de tarefa usa uma sobrecarga de método que não especifica um parâmetro TaskScheduler.

Descrição da regra

Os seguintes métodos de criação e continuação de tarefas do .NET têm sobrecargas que permitem especificar ou omitir uma instância TaskScheduler:

Sempre especifique um argumento TaskScheduler explícito para evitar o valor Current padrão, cujo comportamento é definido pelo chamador e pode variar em tempo de execução. O Current retorna o agendador associado ao que Task estiver executando no momento nesse thread. Se não houver essa tarefa, ele retornará Default, o que representa o pool de threads. O uso de Current pode levar a deadlocks ou problemas de capacidade de resposta da interface do usuário em algumas situações, quando ele se destina a criar a tarefa no pool de threads, mas, em vez disso, aguarda para voltar ao thread da interface do usuário.

Para obter mais informações e exemplos detalhados, consulte Novos TaskCreationOptions e TaskContinuationOptions no .NET Framework 4.5.

Como corrigir violações

Para corrigir violações, chame a sobrecarga do método que recebe um TaskScheduler e passa explicitamente Default ou Current para deixar a intenção clara.

Quando suprimir avisos

Esse aviso destina-se principalmente a bibliotecas, em que o código pode ser executado em ambientes arbitrários e onde ele não deve fazer suposições sobre o ambiente ou como o chamador do método pode estar invocando ou esperando por ele. Pode ser apropriado suprimir o aviso para projetos que representam código do aplicativo em vez de código de biblioteca.

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 CA2008
// The code that's violating the rule is on this line.
#pragma warning restore CA2008

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.CA2008.severity = none

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

Confira também