Partilhar via


CA1849: Utilize métodos assíncronos quando estiver em um método assíncrono

Propriedade valor
ID da regra CA1849
Título Chamar métodos assíncronos ao estar em um método assíncrono
Categoria Desempenho
A correção causa interrupção ou não Ininterrupto
Habilitado por padrão no .NET 10 Não
Línguas aplicáveis C# e Visual Basic

Motivo

Todos os métodos em que existe um equivalente com sufixo "Async" produzirão este aviso quando chamados a partir de um método que retorna uma 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