Was nutzt die Übergabe von CancellationToken an den Task Class-Konstruktor?
Hier ist ein Beispiel-code, erstellt eine neue Aufgabe, die simuliert einen lang andauernden Prozess.Es gibt nicht viel auf die Aufgabe als solche und die rein konzentriert sich auf die cancelling-Funktionen.Ich bin mit Rücktritt token zum Abbrechen der Aufgabe und der code funktioniert gut für mich.
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);
}
}
Aber onething, dass ich nicht verstehen konnte, ist der token-parameter(CTS.Token), die weitergegeben wird an die Task-Konstruktor.Was ist die tatsächliche Nutzung der übergabe der parameter,Wann kann ich eigentlich Abbrechen, die Aufgabe auch ohne passing-token an den Konstruktor übergeben.
Unten ist eine leicht modifizierte version, die funktioniert ohne den parameter token.
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;
}
};
InformationsquelleAutor der Frage Prabhu Murthy | 2012-06-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
UPDATE:
Die folgenden msdn Frage beschreibt den Grund:
InformationsquelleAutor der Antwort daryal