Maison >développement back-end >C++ >Comment pouvons-nous annuler efficacement les tâches TPL ?
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 CancellationToken
s. 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!