Aquí hay un código de muestra que crea una nueva tarea que simula un proceso de larga ejecución. No hay mucho en la tarea como tal y se centra exclusivamente en las características de cancelación. Estoy utilizando un token de cancelación para cancelar la tarea y el código funciona bien para mi.¿De qué sirve pasar el constructor CancellationToken to Task Class?
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);
}
}
Pero onething que no pude entender es el parámetro token (CTS.Token) que se pasa a la tarea Constructor.What es el uso real de pasar el parámetro, cuando realmente puedo cancelar la tarea incluso sin pasar token al constructor.
A continuación se muestra una versión ligeramente modificada que funciona sin el parámetro 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;
}
};
Yo recomendaría la lectura: http://blogs.msdn.com/b/pfxteam/archive/2009/05/22/9635790.aspx – Slugart