Hier ist ein Beispielcode, der eine neue Aufgabe erstellt, die einen langwierigen Prozess simuliert. Es gibt nichts viel auf die Aufgabe als solche und konzentriert sich nur auf die Aufhebung Funktionen. Ich benutze Abbruch-Token, um die Aufgabe abzubrechen und der Code funktioniert gut für mich.Was nutzt die Übergabe von CancellationToken an den Task Class-Konstruktor?
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, die ich nicht verstehen kann, ist der Token-Parameter (CTS.Token), die auf den Task-Constructor.What geben wird die tatsächliche Nutzung des Leitens des Parameters ist, wenn ich die Aufgabe tatsächlich abbrechen auch ohne Token an den Konstruktor zu übergeben.
Unten ist eine leicht modifizierte Version, die ohne den Token-Parameter funktioniert.
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;
}
};
würde ich Lesung empfehlen: http://blogs.msdn.com/b/pfxteam/archive/2009/05/22/9635790.aspx – Slugart