Comparteix a través de


CA2012: Usar ValueTasks correctamente

Propiedad Value
Identificador de la regla CA2012
Título Usar ValueTasks correctamente
Categoría Confiabilidad
La corrección es problemática o no problemática Poco problemático
Habilitado de forma predeterminada en .NET 9 Como sugerencia

Causa

Una instancia de ValueTask devuelta de una invocación de miembro se utiliza de una forma que puede provocar excepciones, daños o un rendimiento deficiente.

Descripción de la regla

ValueTask instancias devueltas de las invocaciones de miembro están diseñadas para que se espere por ellas de forma directa. Los intentos de consumir un ValueTask varias veces o de acceder directamente a los resultados de uno antes de que se sepa que se ha completado pueden producir una excepción o daños. Que se omita un ValueTask probablemente indica que se trata de un error funcional y puede degradar el rendimiento.

Cómo corregir infracciones

En general, debe esperarse directamente a los ValueTasks en lugar de descartarlo o almacenarlo en otras ubicaciones, como variables locales o campos.

Cuándo suprimir las advertencias

En el caso de los objetos ValueTask devueltos por llamadas de miembro arbitrarias, el autor de la llamada debe asumir que ValueTask debe consumirse (es decir, esperarse) una única vez. Sin embargo, si el desarrollador controla también el miembro que se invoca y tiene un conocimiento completo de su implementación, es posible que el desarrollador sepa que se puede suprimir la advertencia, por ejemplo, si el objeto ValueTask devuelto siempre encapsula un objeto Task.

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 CA2012
// The code that's violating the rule is on this line.
#pragma warning restore CA2012

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.CA2012.severity = none

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

Consulte también