Utilisation de CancellationToken dans .NET Core : Un exemple pratique
Le token d'annulation (CancellationToken) est un outil puissant dans .NET Core pour gérer les opérations asynchrones et arrêter le travail en cours de manière contrôlée. Il permet de répondre à des interruptions utilisateur, des changements de conditions ou des délais d'expiration. Dans cet article, nous allons explorer un exemple concret d'utilisation de CancellationToken dans une application .NET Core.
Scénario : Téléchargement de données
Imaginez une application qui télécharge des données d'un serveur distant. Ce processus peut prendre du temps, et l'utilisateur peut souhaiter l'arrêter à tout moment. C'est là que le CancellationToken intervient.
using System.Threading;
using System.Threading.Tasks;
public class DataDownloader
{
public async Task DownloadDataAsync(CancellationToken cancellationToken)
{
// Simuler le téléchargement des données
await Task.Delay(5000, cancellationToken);
// Vérifier si l'opération a été annulée
if (cancellationToken.IsCancellationRequested)
{
throw new OperationCanceledException("Téléchargement annulé");
}
// Renvoyer les données téléchargées (ici, un simple texte)
return "Données téléchargées !";
}
}
Explication du code
- Définition d'un CancellationToken : Dans le code ci-dessus, la méthode
DownloadDataAsync
prend unCancellationToken
en argument. - Annulation avec Task.Delay : La méthode
Task.Delay
est utilisée pour simuler le téléchargement des données. LeCancellationToken
est passé àTask.Delay
pour permettre l'annulation de l'opération en cours. - Vérification de l'annulation : La méthode
IsCancellationRequested
vérifie si le token a été annulé. Si c'est le cas, une exceptionOperationCanceledException
est levée. - Retour des données : Si l'opération n'a pas été annulée, les données téléchargées sont renvoyées.
Utilisation du CancellationToken
Voici comment utiliser le code ci-dessus pour annuler le téléchargement :
// Création d'un CancellationTokenSource
using var cts = new CancellationTokenSource();
// Démarrage de l'opération de téléchargement
var downloader = new DataDownloader();
var task = downloader.DownloadDataAsync(cts.Token);
// Annulation du téléchargement après 2 secondes
await Task.Delay(2000);
cts.Cancel();
// Gestion de l'exception d'annulation
try
{
var data = await task;
Console.WriteLine(data);
}
catch (OperationCanceledException ex)
{
Console.WriteLine($"Téléchargement annulé : {ex.Message}");
}
Conclusion
Le CancellationToken est un outil essentiel pour la gestion des opérations asynchrones dans .NET Core. Il permet de garantir une interruption propre et contrôlée, ce qui est crucial pour des applications réactives et robustes. N'hésitez pas à l'utiliser dans vos projets pour gérer les opérations longue durée et offrir une meilleure expérience utilisateur.