Qu'est-ce que l'utilisation de la transmission CancellationToken à la Tâche constructeur de la Classe?
Voici un exemple de code qui crée une nouvelle tâche qui simule un long processus en cours d'exécution.Il n'y a rien beaucoup sur la tâche en tant que telle et purement met l'accent sur l'annulation de fonctionnalités.Je suis à l'aide jeton d'annulation pour annuler la tâche et le code fonctionne très bien pour moi.
CancellationTokenSource CTS= new CancellationTokenSource();
Task<Boolean> PTask = new Task<Boolean>(() =>
{
while (true)
{
if (!CTS.Token.IsCancellationRequested)
{
Thread.Sleep(5000);
}
else{Console.WriteLine("Thread Cancelled");break;}
}
return true;
}, CTS.Token, TaskCreationOptions.None);
PTask.Start();
Console.WriteLine("Hit Enter to cancel the Secondary thread you have started");
Console.ReadLine();
CTS.Cancel();
System.Console.WriteLine(PTask.Result);
}
}
Mais onething que je ne pouvais pas comprendre, c'est le paramètre du jeton(CTS.Jeton) qui est passé sur la Tâche Constructeur.Qu'est-ce que l'utilisation réelle de la transmission du paramètre,quand je peux effectivement annuler la tâche, même sans passage de jeton pour le constructeur.
Vers le bas ci-dessous est une version légèrement modifiée qui fonctionne sans le paramètre jeton.
CancellationTokenSource CTS= new CancellationTokenSource();
Task<Boolean> PTask = new Task<Boolean>(() =>
{
while (true)
{
if (!CTS.Token.IsCancellationRequested)
{
Thread.Sleep(5000);
}
else
{
Console.WriteLine("Thread Cancelled");
break;
}
};
- Je recommande la lecture: blogs.msdn.com/b/pfxteam/archive/2009/05/22/9635790.aspx
Vous devez vous connecter pour publier un commentaire.
Mise à JOUR:
La suite msdn question explique la raison:
Task.Run(async () => { throw new OperationCanceledException(); }, new CancellationToken(false)).ContinueWith(tsk => Console.WriteLine(tsk.Status))
retourne Annulé, pas de Défaut.