Partilhar via


CA2008: Não crie tarefas sem passar por um TaskScheduler

Property valor
ID da regra CA2008
Título Não crie tarefas sem passar por um TaskScheduler
Categoria Fiabilidade
A correção está quebrando ou não quebrando Sem quebra
Habilitado por padrão no .NET 9 Não

Motivo

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

Descrição da regra

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

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

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

Como corrigir violações

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

Quando suprimir avisos

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

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

Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none no arquivo de configuração.

[*.{cs,vb}]
dotnet_diagnostic.CA2008.severity = none

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

Consulte também