Partager via


CA2008 : Ne pas créer de tâches sans passer TaskScheduler

Propriété Value
Identificateur de la règle CA2008
Titre Ne pas créer de tâches sans passer TaskScheduler
Catégorie Fiabilité
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 8 Non

Cause

Une opération de création ou de continuation de tâche utilise une surcharge de méthode qui ne spécifie pas de paramètre TaskScheduler.

Description de la règle

Les méthodes de création et de continuation de tâches .NET suivantes ont des surcharges qui permettent de spécifier ou d’omettre une instance de TaskScheduler :

Spécifiez toujours un argument explicite TaskScheduler pour éviter la valeur par défaut Current, dont le comportement est défini par l’appelant et peut varier au moment de l’exécution. Current retourne le planificateur associé à tout Task en cours d’exécution sur ce thread. S’il n’existe aucune tâche de ce type, elle retourne Default, qui représente le pool de threads. L’utilisation de Current peut entraîner des blocages ou des problèmes de réactivité de l’interface utilisateur dans certaines situations, quand elle était destinée à créer la tâche sur le pool de threads, mais qu’à la place elle attend de revenir sur le thread d’interface utilisateur.

Pour plus d’informations et des exemples détaillés, consultez Nouvelles options TaskCreationOptions et TaskContinuationOptions dans .NET Framework 4.5.

Comment corriger les violations

Pour corriger les violations, appelez la surcharge de méthode qui prend un TaskScheduler et transmet explicitement Default ou Current pour clarifier l’intention.

Quand supprimer les avertissements

Cet avertissement est principalement destiné aux bibliothèques, où le code peut être exécuté dans des environnements arbitraires et où le code ne doit pas faire d’hypothèses sur l’environnement ou sur la façon dont l’appelant de la méthode peut l’appeler ou l’attendre. Il peut être approprié de supprimer l’avertissement pour les projets qui représentent le code d’application plutôt que le code de bibliothèque.

Supprimer un avertissement

Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.

#pragma warning disable CA2008
// The code that's violating the rule is on this line.
#pragma warning restore CA2008

Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none dans le fichier de configuration.

[*.{cs,vb}]
dotnet_diagnostic.CA2008.severity = none

Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.

Voir aussi