.net Cancellationtoken Example

4 min read Jun 03, 2024
.net Cancellationtoken Example

Annuler des tâches avec CancellationToken en .NET

Le CancellationToken est un objet .NET puissant qui permet d'annuler des opérations asynchrones en cours. Il offre un moyen propre et fiable de gérer les interruptions de tâches longues et de prévenir les blocages inutiles.

Comment utiliser CancellationToken

1. Créer un CancellationTokenSource:

Commencez par créer un CancellationTokenSource, qui est responsable de la gestion du CancellationToken.

CancellationTokenSource source = new CancellationTokenSource();
CancellationToken token = source.Token;

2. Passer le CancellationToken aux méthodes asynchrones:

Passez le CancellationToken à toutes les méthodes asynchrones qui peuvent être annulées. Utilisez le paramètre CancellationToken pour indiquer que la tâche peut être annulée.

async Task LongRunningTask(CancellationToken token)
{
    // ...

    while (!token.IsCancellationRequested) 
    {
        // Effectuer des tâches
        await Task.Delay(1000, token); // Vérifier l'annulation chaque seconde
    }

    // ...
}

3. Vérifier l'état d'annulation:

Dans la méthode asynchrone, utilisez la propriété IsCancellationRequested du CancellationToken pour vérifier si l'annulation a été demandée.

4. Annuler la tâche:

Pour annuler la tâche, appelez la méthode Cancel() sur le CancellationTokenSource.

// Annuler la tâche après 5 secondes
Task.Delay(5000).ContinueWith(_ => source.Cancel()); 

Exemple pratique

using System;
using System.Threading;
using System.Threading.Tasks;

public class Program
{
    static async Task Main(string[] args)
    {
        CancellationTokenSource source = new CancellationTokenSource();
        CancellationToken token = source.Token;

        // Démarrer une tâche longue
        Task task = LongRunningTask(token);

        // Annuler la tâche après 5 secondes
        Task.Delay(5000).ContinueWith(_ => source.Cancel()); 

        try
        {
            await task;
        }
        catch (OperationCanceledException)
        {
            Console.WriteLine("Tâche annulée !");
        }

        Console.ReadLine();
    }

    static async Task LongRunningTask(CancellationToken token)
    {
        Console.WriteLine("Démarrage de la tâche longue...");
        for (int i = 0; i < 10; i++)
        {
            Console.WriteLine($"Étape {i+1}...");
            await Task.Delay(1000, token); 
        }
        Console.WriteLine("Tâche terminée !");
    }
}

Résultat:

Ce code affichera les messages de progression jusqu'à ce que la tâche soit annulée après 5 secondes. L'exception OperationCanceledException sera levée et la tâche sera marquée comme annulée.

Conclusion

CancellationToken est un outil essentiel pour gérer les annulations de tâches asynchrones en .NET. Il offre un moyen élégant et efficace de répondre aux interruptions et aux changements de contexte, améliorant ainsi la fiabilité et la réactivité de vos applications. N'oubliez pas d'utiliser CancellationToken pour tous les processus asynchrones qui peuvent être interrompus, et de gérer les exceptions d'annulation pour garantir un traitement adéquat.

Featured Posts