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
Patricia Arquetteoriginal
2025-01-19 11:31:12780parcourir

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 :

    <code class="language-C#"> using (CancellationTokenSource tokenSource = new CancellationTokenSource())
     {
         Task.Run(() => { }, tokenSource.Token);
     }</code>
  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 :

    <code class="language-C#"> Task.Run(async () =>
     {
         try
         {
             // 任务代码
         }
         finally
         {
             tokenSource.Dispose();
         }
     }, tokenSource.Token);</code>
  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 :

    <code class="language-C#"> CancellationTokenSource tokenSource = new CancellationTokenSource();
     Task.Run(() => { }, tokenSource.Token);
     // ...
     tokenSource.Dispose();</code>

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:
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