Was nützt es, CancellationToken an den Task-Klassenkonstruktor zu übergeben?

Hier ist ein Beispielcode, mit dem eine neue Aufgabe erstellt wird, die einen lang andauernden Prozess simuliert. Die Aufgabe als solche ist wenig und konzentriert sich ausschließlich auf die Abbruchfunktionen. Ich verwende ein Abbruchtoken, um die Aufgabe abzubrechen, und der Code funktioniert einwandfrei für mich .

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

    }
}

Aber etwas, das ich nicht verstehen konnte, ist der Token-Parameter (CTS.Token), der an den Task-Konstruktor übergeben wird. Was ist die tatsächliche Verwendung der Übergabe des Parameters, wenn ich die Aufgabe tatsächlich abbrechen kann, auch ohne Token an den Konstruktor übergeben .

Unten finden Sie eine leicht geänderte Version, die ohne den Token-Parameter funktioniert.

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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage