Maison > développement back-end > C++ > Quand et comment dois-je me débarrasser d'un CancellationTokenSource ?

Quand et comment dois-je me débarrasser d'un CancellationTokenSource ?

Patricia Arquette
Libérer: 2025-01-19 11:31:12
original
790 Les gens l'ont consulté

When and How Should I Dispose of a CancellationTokenSource?

Meilleures pratiques : gérer correctement CancellationTokenSource

CancellationTokenSource Bien que les classes puissent être publiées, la bonne façon de les publier déroute souvent les développeurs. Cet article explique quand et comment publier efficacement cette classe.

Une des raisons de ce manque de clarté est que la classe CancellationTokenSource n'a pas de finaliseur. Cela signifie que le garbage collector (GC) ne peut pas le libérer automatiquement. Par conséquent, il incombe au développeur de publier explicitement la source du jeton.

Malgré cela, les exemples fournis sur MSDN mentionnent rarement les versions. Alors, quelle est l’approche recommandée ?

Stratégie de sortie

  1. Utilisez les instructions « using » lorsque vous attendez que les tâches soient terminées : Si vous attendez la fin des tâches parallèles, vous pouvez envelopper votre code avec une instruction « using ». Cela garantit que la source du jeton est automatiquement libérée une fois la tâche terminée :

     using (CancellationTokenSource tokenSource = new CancellationTokenSource())
     {
         Task.Run(() => { }, tokenSource.Token);
     }
    Copier après la connexion
  2. Utilisez ContinueWith et la libération manuelle : Vous pouvez également enregistrer un gestionnaire d'événements ContinueWith sur la tâche et libérer manuellement la source du jeton dans le gestionnaire :

     Task.Run(async () =>
     {
         try
         {
             // 任务代码
         }
         finally
         {
             tokenSource.Dispose();
         }
     }, tokenSource.Token);
    Copier après la connexion
  3. Requêtes PLINQ annulables : Pour les requêtes PLINQ annulables qui ne sont pas renvoyées de manière synchrone, l'approche recommandée consiste à effectuer toutes les opérations dans le gestionnaire d'événements CancellationTokenSource. Dispose

  4. Réutilisabilité et utilisations multiples : Les instances ne sont pas réutilisables. Ils doivent être créés et validés pour chaque opération d'annulation. CancellationTokenSource

  5. Libérer directement : Si vous ne parvenez pas à utiliser une instruction 'using' ou un gestionnaire d'événement ContinueWith, vous pouvez libérer la source du jeton directement après qu'elle ait rempli son objectif :

     CancellationTokenSource tokenSource = new CancellationTokenSource();
     Task.Run(() => { }, tokenSource.Token);
     // ...
     tokenSource.Dispose();
    Copier après la connexion

Résumé

Libérer

instances est essentiel pour éviter les fuites de mémoire et garantir une bonne gestion des ressources. En adhérant à la stratégie de publication recommandée, les développeurs peuvent gérer efficacement les opérations d'annulation dans leur code. CancellationTokenSource

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal