Oto przykładowy kod, który tworzy nowe zadanie, które symuluje długotrwały proces. Nie ma w nim nic zbyt dużego i koncentruje się wyłącznie na funkcjach anulowania. Używam tokena anulowania, aby anulować zadanie, a kod działa poprawnie dla mnie.Do czego służy przekazanie Token Anulowania do konstruktora klasy zadań?
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);
}
}
Ale onething, że nie mogę zrozumieć, token parametru (CTS.Token), które jest przekazywane do Constructor.What zadaniem jest rzeczywiste wykorzystanie przekazując parametr, gdy faktycznie mogę anulować zadanie nawet bez podania tokena do konstruktora.
Poniżej znajduje się nieco zmodyfikowana wersja, która działa bez parametru tokenu.
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;
}
};
Polecam lekturę: http://blogs.msdn.com/b/pfxteam/archive/2009/05/22/9635790.aspx – Slugart