CA1849: Chamar métodos assíncronos quando em um método assíncrono
Propriedade | valor |
---|---|
ID da regra | CA1849 |
Cargo | Chamar métodos assíncronos quando em um método assíncrono |
Categoria | Desempenho |
A correção está quebrando ou não quebrando | Sem quebra |
Habilitado por padrão no .NET 8 | Não |
Causa
Todos os métodos em que existe um equivalente sufixo Async produzirão esse aviso quando chamados de um método de retorno de tarefa. Além disso, chamando Task.Wait()
, Task<T>.Result
ou Task.GetAwaiter().GetResult()
produzirá este aviso.
Descrição da regra
Em um método que já é assíncrono, as chamadas para outros métodos devem ser para suas versões assíncronas, quando existirem.
Como corrigir violações
Violação:
Task DoAsync()
{
file.Read(buffer, 0, 10);
}
Correção:
Aguarde a versão assíncrona do método:
async Task DoAsync()
{
await file.ReadAsync(buffer, 0, 10);
}
Quando suprimir avisos
É seguro suprimir um aviso dessa regra no caso de haver dois caminhos de código separados para sincronização e código assíncrono, usando uma condição if. Além disso, se houver uma verificação para saber se a tarefa foi resolvida, é seguro usar métodos e propriedades de sincronização.
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 CA1849
// The code that's violating the rule is on this line.
#pragma warning restore CA1849
Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA1849.severity = none
Para obter mais informações, consulte Como suprimir avisos de análise de código.