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
DDDoriginal
2025-01-25 02:26:171023parcourir

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 :

<code class="language-csharp">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();
    }
}</code>

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