Erfasst Task.ContinueWith den aufrufenden Threadkontext für die Fortsetzung?

8

% code% ist eine vereinfachte Version von Code, die auf einem UI-Thread ausgeführt wird (mit WindowsFormsSynchronizationContext ):

%Vor%

Soll ich explizit Test_Click angeben, um sicherzustellen, dass die Fortsetzungsaktion auf demselben UIhread ausgeführt wird? Oder nimmt TaskScheduler.FromCurrentSynchronizationContext() den Ausführungskontext automatisch auf (wodurch ContinueWith Argument in diesem Fall überflüssig wird)?

Ich nehme an, dass es das nicht standardmäßig macht (im Gegensatz zu TaskScheduler ), aber bis jetzt konnte ich keine Online-Ressource finden, um dies zu bestätigen.

    
Noseratio 19.08.2013, 11:28
quelle

1 Antwort

6

Es verwendet standardmäßig nicht den aktuellen Synchronisationskontext, sondern TaskScheduler.Current , wie im folgenden dekompilierten Code zu sehen ist:

%Vor%

TaskScheduler.Current ist entweder TaskScheduler.Default oder der TaskScheduler der aktuellen Aufgabe, wenn die Aufgabe eine untergeordnete Aufgabe ist. Geben Sie immer den Taskplaner an, wenn Sie nicht auf seltsame Probleme oder besser, verwenden Sie await , wenn Sie können.

    
Julien Lebosquain 19.08.2013, 11:51
quelle