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
Zwei Dinge werden passieren.
Canceled
Zustand sein wird. 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
.
Tags und Links c# task-parallel-library