Comparteix a través de


CA1849: Llamada a métodos asincrónicos en un método asincrónico

Propiedad Value
Identificador de la regla CA1849
Título Llamar a métodos asíncronos cuando se está en un método asíncrono
Categoría Rendimiento
La corrección es problemática o no problemática Poco problemático
Habilitado de forma predeterminada en .NET 9 No

Causa

Todos los métodos en los que existe un equivalente con sufijo asincrónico producirán esta advertencia cuando se les llame desde un método de devolución de tareas. Además, al llamar a Task.Wait(), Task<T>.Result o Task.GetAwaiter().GetResult() se producirá esta advertencia.

Descripción de la regla

En un método que ya es asincrónico, las llamadas a otros métodos deben ser a sus versiones asincrónicas, donde existan.

Cómo corregir infracciones

Infracción:

Task DoAsync()
{
    file.Read(buffer, 0, 10);
}

Corrección:

Espere la versión asincrónica del método :

async Task DoAsync()
{
    await file.ReadAsync(buffer, 0, 10);
}

Cuándo suprimir las advertencias

Es seguro suprimir una advertencia de esta regla en el caso de que haya dos rutas de código independientes para el código sincrónico y asincrónico, mediante una condición if. Además, si hay una comprobación de si la tarea se ha resuelto, es seguro usar métodos y propiedades de sincronización.

Supresión de una advertencia

Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la regla.

#pragma warning disable CA1849
// The code that's violating the rule is on this line.
#pragma warning restore CA1849

Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad en none del archivo de configuración.

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

Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.

Vea también