Compartir vía


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 10 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