Compartir vía


CA2008: No crear tareas sin pasar un elemento TaskScheduler

Propiedad Value
Identificador de la regla CA2008
Título No crear tareas sin pasar un elemento TaskScheduler
Categoría Confiabilidad
La corrección es problemática o no problemática Poco problemático
Habilitado de forma predeterminada en .NET 8 No

Causa

Una operación de creación o continuación de tareas utiliza una sobrecarga de método que no especifica un parámetro TaskScheduler.

Descripción de la regla

Los siguientes métodos de creación y continuación de tareas de .NET tienen sobrecargas que permiten especificar u omitir una instancia de TaskScheduler:

Especifique siempre un argumento explícito TaskScheduler para evitar el valor predeterminado Current, cuyo comportamiento lo define el autor de la llamada y puede variar en tiempo de ejecución. Current devuelve el programador asociado a cualquier Task que se esté ejecutando actualmente en ese subproceso. Si no hay ninguna tarea, devuelve Default, que representa el grupo de subprocesos. El uso de Current puede provocar interbloqueos o problemas de capacidad de respuesta de la interfaz de usuario en algunas situaciones, como cuando se diseñó para crear la tarea en el grupo de subprocesos, pero en su lugar se encuentra en espera para volver a entrar en el subproceso de la interfaz de usuario.

Para obtener más información y ejemplos detallados, consulte Nuevas TaskCreationOptions y TaskContinuationOptions en .NET Framework 4.5.

Cómo corregir infracciones

Para corregir las infracciones, llame a la sobrecarga del método que toma TaskScheduler y pase explícitamente Default o Current para que la intención sea clara.

Cuándo suprimir las advertencias

Esta advertencia está principalmente destinada a las bibliotecas, donde el código se puede ejecutar en entornos arbitrarios y no debe realizar suposiciones sobre el entorno o sobre cómo el autor de la llamada del método puede invocarlo o esperarlo. Puede ser adecuado suprimir la advertencia en los proyectos que representan código de aplicación en lugar de código de biblioteca.

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

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

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

Consulte también