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 8 | 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.