Warum wird das Abbruch-Token an TaskFactory.StartNew übergeben?

8

Neben der gebräuchlichsten Form des Aufrufs von TaskFactory.StartNew mit nur dem Parameter "action" (1) Ссылка

wir haben auch eine Methode, die einen zusätzlichen Parameter als "Cancelation Token" akzeptiert (2) Ссылка

Meine Frage ist, warum sollten wir den Anruf (2) anstelle von Anruf (1) verwenden?

Ich meine, das Beispiel in MSDN für Seite (2) würde auch funktionieren, wenn ich das Cancellation Token nicht als Parameter übergebe (weil das variable Token über die Delegate-Funktion zugänglich ist. So etwas wie:

%Vor%

Also passiert irgendetwas darunter, wenn ich das Abbruch-Token an Task.Factory.StartNew übergebe?

Danke

    
Zé Carlos 21.03.2016, 15:26
quelle

1 Antwort

7

Zwei Dinge werden passieren.

  1. Wenn das Token vor StartNew abgebrochen wurde genannt wird, wird es nie den Faden beginnen und die Aufgabe in dem Canceled Zustand sein wird.
  2. Wenn ein OperationCanceledException angehoben wird von Innerhalb der Aufgabe, und diese Ausnahme wurde im selben Token wie StartNew übergeben. Dies führt dazu, dass die zurückgegebene Aufgabe in den Zustand Cancelled eintritt. Wenn das Token mit der Ausnahme zugeordnet ist ein anderes Token ist oder Sie nicht ein Token in der Aufgabe bestanden hat den Faulted Zustand.

PS Sie sollten nie% nennen co_de% ohne in einem Task.Factory.StartNew , denn wenn Sie dies nicht tun kann es leicht führt dazu, dass Sie Code für den UI-Thread ausführen, der in einem Hintergrund-Thread ausgeführt werden sollte . Verwenden Sie TaskScheduler statt, es sei denn Sie absoultely verwenden müssen Task.Run( , StartNew hat die gleiche Task.Run Verhalten in CancellationToken .

    
Scott Chamberlain 21.03.2016, 15:29
quelle

Tags und Links