Ecco un codice di esempio che crea una nuova attività che simula un processo in esecuzione prolungata. Non c'è molto sull'attività in quanto tale e si concentra esclusivamente sulle funzionalità di cancellazione. Uso il token di cancellazione per annullare l'attività e il codice funziona correttamente per me.Qual è l'uso del passaggio di CancellationToken al costruttore della classe Task?
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);
}
}
Ma onething che non ho potuto capire è il parametro token (CTS.Token) che viene trasmesso al Task Constructor.What è l'uso effettivo di passare il parametro, quando posso effettivamente annullare l'attività anche senza passare token al costruttore.
In basso è una versione leggermente modificata che funziona senza il parametro 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;
}
};
mi sento di raccomandare la lettura: http://blogs.msdn.com/b/pfxteam/archive/2009/05/22/9635790.aspx – Slugart