Maison >développement back-end >C++ >Quand devriez-vous vous débarrasser d'un CancellationTokenSource ?

Quand devriez-vous vous débarrasser d'un CancellationTokenSource ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-19 11:42:09758parcourir

When Should You Dispose of a CancellationTokenSource?

Libérer correctement la ressource CancellationTokenSource

Dans .NET, CancellationTokenSource est utilisé pour gérer l'annulation des threads et doit être publié explicitement pour éviter les fuites de ressources. Bien que cette étape soit souvent omise dans les exemples MSDN, la gestion correcte des ressources est essentielle.

Pourquoi devez-vous libérer CancellationTokenSource ?

  • CancellationTokenSource Utilisez des ressources non gérées (par exemple, les événements du noyau) qui doivent être nettoyées pour éviter les fuites de mémoire.
  • Le garbage collector (GC) ne libérera pas automatiquement l'objet CancellationTokenSource car il n'a pas de finaliseur.

Méthode de libération correcte

  • Instruction using : Si vous attendez la fin d'une tâche parallèle, vous pouvez utiliser l'instruction using pour libérer automatiquement la source du jeton.
  • ContinueWith : Attachez une méthode ContinueWith à la tâche qui appelle Dispose() sur la source du jeton.
  • Libération explicite : Appelez manuellement Dispose() sur la source du jeton une fois la tâche parallèle ou la requête PLINQ terminée.

Réutilisabilité

CancellationTokenSource ne peut pas être réutilisé. Après avoir démarré une tâche ou une requête PLINQ, créez une nouvelle source de jeton. La réinitialisation de IsCancellationRequested et Token n'est pas prise en charge.

Stratégies recommandées

Pour gérer efficacement plusieurs CancellationTokenSource instances, considérez les éléments suivants :

  • Utilisez les instructions using autant que possible (par exemple, lorsque vous attendez des tâches parallèles).
  • Pour les tâches de longue durée, adoptez un modèle : créez une source de jeton, transmettez le jeton enchaîné à la tâche et libérez explicitement la source lorsque la tâche est terminée (par exemple, en utilisant ContinueWith ou une version explicite) .
  • Assurez-vous que tous les chemins de code pouvant conduire à une annulation libèrent la source du jeton pour éviter les fuites de mémoire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn