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

Ниже представлена ​​немного измененная версия, которая работает без параметра 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;
               }
       };
20
задан i3arnon 31 March 2014 в 15:18
поделиться