Maison > développement back-end > C++ > Comment pouvons-nous annuler efficacement les tâches TPL ?

Comment pouvons-nous annuler efficacement les tâches TPL ?

DDD
Libérer: 2025-01-25 02:26:17
original
1081 Les gens l'ont consulté

How Can We Effectively Cancel TPL Tasks?

Résiliation gracieuse des tâches TPL : tirer parti des jetons d'annulation

En programmation parallèle, la gestion du cycle de vie des tâches est essentielle. Bien que les threads offrent une méthode Abort, celle-ci ne convient pas aux tâches TPL (Task Parallel Library) qui utilisent un pool de threads. Interrompre une tâche TPL nécessite une solution plus élégante.

L'approche recommandée implique des CancellationTokens. Ces jetons fournissent un mécanisme pour signaler les demandes d'annulation aux tâches en cours d'exécution. Illustrons avec un exemple :

class Program
{
    static void Main()
    {
        var cts = new CancellationTokenSource();
        CancellationToken ct = cts.Token;

        Task task = Task.Factory.StartNew(() =>
        {
            while (!ct.IsCancellationRequested)
            {
                // Perform lengthy operation
                Thread.Sleep(100);
            }
            Console.WriteLine("Task cancelled gracefully.");
        }, ct);

        // Simulate some work before cancellation
        Thread.Sleep(3000);

        // Initiate cancellation
        cts.Cancel();
        task.Wait(); // Wait for task completion
        Console.ReadLine();
    }
}
Copier après la connexion

Ce code montre comment un CancellationTokenSource crée un jeton que la tâche surveille. La propriété IsCancellationRequested permet à la tâche de vérifier les demandes d'annulation. Dès réception d'un signal d'annulation, la tâche se termine proprement, évitant ainsi une interruption brutale. Cette méthode garantit une fin de tâche contrôlée et prévisible, une amélioration significative par rapport au potentiel d'instabilité de la Abort méthode.

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