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 :
- Méthodes System.Threading.Tasks.TaskFactory.StartNew
- Méthodes System.Threading.Tasks.Task.ContinueWith
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.
Notes
VSTHRD105 : Éviter les surcharges de méthode qui optent par défaut pour TaskScheduler.Current est une règle similaire implémentée dans le package Microsoft.VisualStudio.Threading.Analyzers.
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.