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