Partager via


CA2012 : Utiliser correctement ValueTasks

Propriété Value
Identificateur de la règle CA2012
Titre Utiliser correctement ValueTasks
Catégorie Fiabilité
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 8 Comme suggestion

Cause

Une instance ValueTask retournée par un appel de membre est utilisée d’une manière susceptible d’entraîner des exceptions, des altérations ou des performances médiocres.

Description de la règle

Les instances ValueTask retournées par les appels de membres sont destinées à être directement attendues. Les tentatives d’utilisation d’une ValeurTask plusieurs fois ou d’accéder directement au résultat d’un utilisateur avant qu’il soit connu pour être terminé peuvent entraîner une exception ou une altération. Ignorer une telle ValeurTask est probablement une indication d’un bogue fonctionnel et peut dégrader les performances.

Comment corriger les violations

En général, les tâches ValueTasks doivent être directement attendues plutôt qu’ignorées ou stockées dans d’autres emplacements, tels que des variables ou des champs locaux.

Quand supprimer les avertissements

Pour les objets ValueTask retournés à partir d’appels de membres arbitraires, l’appelant doit partir du principe que le ValueTask doit être consommé (par exemple, attendu) une et une seule fois. Toutefois, si le développeur contrôle également le membre appelé et qu’il a une connaissance complète de son implémentation, il peut savoir qu’il est sans risque de supprimer l’avertissement, par exemple si le ValueTask de retour encapsule toujours un objet Task.

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

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

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

Voir aussi