Obserwujemy coś dziwnego, kod tak:Każdy scenariusz, w którym Task.ContinueWith (..., TaskScheduler.FromCurrentSynchronizationContext()) nie * uruchomi się * w wątku interfejsu użytkownika?
var task = new Task(...); // run in the background, do something lengthy work
task.ContinueWith(..., TaskScheduler.FromCurrentSynchronizationContext());
task.Start();
Drugie zadanie nie wywołuje zdarzenie, które z kolei próbuje zaktualizować GUI, a my się bał wyjątek przekroju gwintu.
Sprawdzanie Thread.CurrentThread.ManagedThreadId
z metody w drugim zadaniu wskazuje, że w rzeczywistości jest to , a nie działa w wątku interfejsu użytkownika.
Kod, który zainicjował zadania jest uruchomiony na wątku interfejsu użytkownika.
Czy jest jakiś scenariusz, w którym to pójdzie źle?
Po co tworzyć zadanie bezpośrednio, zamiast uruchamiać Task.StartNew? –
@PanagiotisKanavos, mogą istnieć uzasadnione powody, aby to zrobić (patrz http://blogs.msdn.com/b/pfxteam/archive/2010/06/13/10024153.aspx), ale nie jest to istotne. –
Cóż, nie mogę tego zaszkodzić, ani nie spotkałem się z tą sytuacją lub kontekst stał się pusty, chyba że wezwanie do tworzenia zadań nie zostało zrobione naprawdę w wątku UI. –