2012-05-11 46 views
20

Mam problem z klasą C# I utworzoną do testowania jednostki mojej aplikacji, w szczególności problem dotyczy obiektu System.Threading.Tasks.Task.Funkcja RunSynchronously może nie zostać wywołana przy uruchomionym zadaniu

Mam listę takich obiektów i na nich chcę wykonać każdy synchronicznie.

Wzywam następujące:

myTask.RunSynchronously(); 

Kiedy robię takie, ja zawsze otrzymuję następujący błąd i nie wiem dlaczego, jak mogę to naprawić.

System.InvalidOperationException: RunSynchronously może nie zostać wywołany w przypadku zadania, które zostało już uruchomione.

Ktoś ma jakieś pomysły?

+1

Czy utworzyć zadanie z 'TaskFactory.StartNew() '? – Tejs

+0

@Tejs tak, to prawda – amateur

Odpowiedz

28

Problemem jest to, że rozpoczęła zadanie podczas rozmowy TaskFactory.StartNew - To znaczy, że nawet w nazwie metody, które zaczynają zadanie. StartNew tworzy zadanie, a następnie wywołuje Start w Twoim imieniu. = D

Jeśli chcesz, możesz albo Wait na zadaniu, jak @Peter Ritchie powiedział, czy można utworzyć zadanie ręcznie tak:

var task = new Task(() => { ... }); 
task.RunSynchronously(); 
24

To już uruchomiony, wystarczy użyć myTask.Wait()

Powiązane problemy