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.