CA2247 : L’argument passé au constructeur TaskCompletionSource doit être l’enum TaskCreationOptions au lieu de l’enum TaskContinuationOptions
Propriété | Value |
---|---|
Identificateur de la règle | CA2247 |
Titre | L’argument passé au constructeur TaskCompletionSource doit être l’enum TaskCreationOptions au lieu de l’enum TaskContinuationOptions |
Catégorie | Utilisation |
Le correctif est cassant ou non cassant | Sans rupture |
Activé par défaut dans .NET 8 | À titre d’avertissement |
Cause
Construction d’un System.Threading.Tasks.TaskCompletionSource
avec une valeur d’énumération System.Threading.Tasks.TaskContinuationOptions plutôt qu’une valeur d’énumération System.Threading.Tasks.TaskCreationOptions.
Utilisation de la méthode System.Object.ReferenceEquals pour tester l’égalité d’un ou plusieurs types valeur.
Description de la règle
Le type TaskCompletionSource a un constructeur qui accepte une valeur d’énumération System.Threading.Tasks.TaskCreationOptions, et un autre constructeur qui accepte un Object. La transmission accidentelle d’une valeur d’énumération System.Threading.Tasks.TaskContinuationOptionsau lieu d’une valeur d’énumération System.Threading.Tasks.TaskCreationOptions entraîne l’appel du constructeur basé sur Object : il sera compilé et exécuté, mais il n’aura pas le comportement prévu.
Comment corriger les violations
Pour corriger la violation, remplacez la valeur d’énumération System.Threading.Tasks.TaskContinuationOptions par la valeur d’énumération System.Threading.Tasks.TaskCreationOptions correspondante.
// Violation
var tcs = new TaskCompletionSource<int>(TaskContinuationOptions.RunContinuationsAsynchronously);
// Fixed
var tcs = new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously);
Quand supprimer les avertissements
Une violation de cette règle met presque toujours en évidence un bogue dans le code appelant, de sorte que le code ne se comporte pas comme le développeur l’a prévu, TaskCompletionSource ignorant l’option spécifiée. La seule fois où vous pouvez sans risque supprimer l’avertissement est si le développeur a réellement l’intention de passer un System.Threading.Tasks.TaskContinuationOptions boxed comme argument d’état de l’objet au TaskCompletionSource
.
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 CA2247
// The code that's violating the rule is on this line.
#pragma warning restore CA2247
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.CA2247.severity = none
Pour désactiver la catégorie entière des règles, définissez la gravité de la catégorie sur none
dans le fichier de configuration.
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Usage.severity = none
Pour plus d’informations, consultez Guide pratique pour supprimer les avertissements de l’analyse de code.