CA1849: Chamar métodos assíncronos quando em um método assíncrono
Property | Valor |
---|---|
ID da regra | CA1849 |
Título | Chamar métodos assíncronos quando em um método assíncrono |
Categoria | Desempenho |
Correção interruptiva ou sem interrupção | Sem interrupção |
Habilitado por padrão no .NET 8 | Não |
Causa
Todos os métodos em que houver um equivalente Async com sufixo produzirão esse aviso quando chamados de um método de retorno de Tarefa. Além disso, chamar Task.Wait()
, Task<T>.Result
ou Task.GetAwaiter().GetResult()
produzirá esse aviso.
Descrição da regra
Em um método já assíncrono, as chamadas para outros métodos devem ser para suas versões assíncronas, onde houver.
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 se houver dois caminhos de código separados para os tipos síncrono e assíncrono, usando-se uma condição if. Além disso, se houver verificação de resolução da Tarefa, é seguro usar métodos e propriedades síncronos.
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 CA1849
// The code that's violating the rule is on this line.
#pragma warning restore CA1849
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.CA1849.severity = none
Para obter mais informações, confira Como suprimir avisos de análise de código.