Вот пример кода, который создает новую задачу, имитирующую длительный процесс. В задаче как таковой нет ничего особенного, и она сосредоточена исключительно на функциях отмены. Я использую токен отмены для отмены задачи, и код отлично работает для меня.
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);
}
}
Но я не мог понять, что это параметр токена (CTS.Token), который передается конструктору задач. Какова фактическая польза от передачи параметра, когда я могу отменить задачу даже без передачи токена? к конструктору.
Ниже представлена немного измененная версия, которая работает без параметра 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;
}
};