Maison > développement back-end > C++ > Comment puis-je annuler gracieusement les tâches TPL au lieu d'utiliser la méthode d'abandon ?

Comment puis-je annuler gracieusement les tâches TPL au lieu d'utiliser la méthode d'abandon ?

Barbara Streisand
Libérer: 2025-01-25 02:33:09
original
1002 Les gens l'ont consulté

How Can I Gracefully Cancel TPL Tasks Instead of Using the Abort Method?

Annuler la mission TPL élégamment

Dans une programmation basée sur le thread, si l'environnement change ou que les threads doivent se terminer à l'avance, la tâche peut devoir être annulée. Cependant, lors de l'utilisation de la méthode ABORD pour terminer le thread, l'instance System.Threading.Task ne sera pas arrêtée automatiquement. Cet article explique pourquoi le signal d'abandon ne peut pas être transmis directement à la tâche et fournit une solution alternative pour annuler le jeton.

Il n'est pas recommandé d'annuler la tâche avec la méthode d'abandon car elle peut provoquer un comportement accidentel et des dommages potentiels des données. La méthode recommandée consiste à utiliser l'annulation du jeton.

L'implémentation de l'annulation du jeton ci-dessous:

Dans cet exemple:
<code class="language-csharp">class Program
{
    static void Main()
    {
        var cts = new CancellationTokenSource();
        CancellationToken ct = cts.Token;

        // 创建一个持续执行某些操作的任务
        Task.Factory.StartNew(() =>
        {
            while (!ct.IsCancellationRequested)
            {
                // 模拟繁重的工作
                Thread.Sleep(100);
            }
            Console.WriteLine("任务已取消");
        }, ct);

        // 模拟等待任务启动一小段时间
        Thread.Sleep(3000);

        // 发送取消请求
        cts.Cancel();

        // 主线程阻塞,等待用户按下按键
        Console.ReadKey();
    }
}</code>
Copier après la connexion

Créez une annulation de jetons (CTS) et de son jeton (CT).
  • Créez une tâche et configurez-la pour annuler le jeton.
  • À l'intérieur de la tâche, une lourde charge de travail de simulation exécutée en continu et vérifiez régulièrement la demande d'annulation.
  • Après avoir permis à la tâche de démarrer une courte période, le signal d'annulation est envoyé en annulant la source de jeton.
  • Le thread principal est suspendu, attendant que l'utilisateur entre afin d'observer le comportement et la sortie de la tâche.
  • Cet exemple révocal simplifie le code tout en maintenant la fonctionnalité de base et la clarté.

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!

source:php.cn
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