Jaki jest pożytek z przekazywania konstruktora CancellationToken?

Oto przykładowy kod, który tworzy nowe zadanie, które symuluje długotrwały proces. Zadanie jako takie nie ma wiele i skupia się wyłącznie na funkcjach anulowania. Używam tokena anulowania, aby anulować zadanie, a kod działa dobrze dla mnie .

       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);

    }
}

Ale onething, którego nie mogłem zrozumieć, to parametr tokena (CTS.Token), który jest przekazywany do Konstruktora zadań. Jaki jest faktyczny przebieg przekazywania parametru, gdy mogę faktycznie anulować zadanie, nawet bez przekazywania tokena konstruktorowi .

Poniżej znajduje się nieco zmodyfikowana wersja, która działa bez parametru 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;
               }
       };

questionAnswers(1)

yourAnswerToTheQuestion