Używam zadań do uruchamiania długotrwałych wywołań serwera w moim ViewModel, a wyniki są kierowane z powrotem przy Dispatcherużyciu TaskScheduler.FromSyncronizationContext(). Na przykład:
var context = TaskScheduler.FromCurrentSynchronizationContext();
this.Message = "Loading...";
Task task = Task.Factory.StartNew(() => { ... })
.ContinueWith(x => this.Message = "Completed"
, context);
Działa to dobrze, gdy uruchamiam aplikację. Ale kiedy uruchamiam NUnittesty Resharper, otrzymuję komunikat o błędzie w połączeniu z FromCurrentSynchronizationContext:
Bieżący SynchronizationContext nie może być używany jako TaskScheduler.
Wydaje mi się, że dzieje się tak, ponieważ testy są uruchamiane na wątkach roboczych. Jak mogę upewnić się, że testy są uruchamiane w głównym wątku? Wszelkie inne sugestie są mile widziane.
TaskScheduler.FromCurrentSynchronizationContext()wewnątrz lambdy i wykonanie zostało odłożone na inny wątek. pobranie kontekstu poza lambdę rozwiązało problem.