¿Cuál es el uso de pasar CanceToken al constructor de la clase de tarea?

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 enfoca únicamente en las funciones de cancelación. Estoy usando el token de cancelación para cancelar la tarea y el código funciona bien para mí .

       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 una cosa que no pude entender es el parámetro token (CTS.Token) que se pasa al Constructor de tareas. ¿Cuál es el uso real de pasar el parámetro, cuando puedo cancelar la tarea incluso sin pasar el token al constructor? .

Abajo hay 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;
               }
       };

Respuestas a la pregunta(1)

Su respuesta a la pregunta