Partilhar via


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>.Resultou 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.

Consulte também