2013-02-26 14 views
5

Mam test integracji, który używa wielu wątków. Chciałbym, aby jakikolwiek wątek mógł nie zdać testu (i oderwać resztę). Wyjątek w wątku tła powoduje MSTest się niepowodzeniem - po prostu pojawia się błąd:Awaria MSTest z wątków tła

The agent process was stopped while the test was running

Przypuszczam, że mógłbym złapać żadnych wyjątków na wątków tła, i obudzić się główny wątek na niepowodzenie testu, ale jest istnieje łatwiejszy/bardziej elegancki sposób?

+1

Musisz zablokować „głównym” wątku (nitka testy biegacz), aż wątek tła zakończył - to nie z 'Assert' na gwincie Test płozy . jeśli nie zablokujesz tego wątku, biegacz może wyjść, zanim wątek w tle zostanie ukończony. Jeśli podasz przykład tego, co próbujesz, ktoś prawdopodobnie da ci alternatywę. –

Odpowiedz

0

Jeśli koniecznie trzeba stosować różne wątki (a nie ThreadPool jeden) można użyć Task z TaskCreationOptions.LongRunning opcję, która stworzy specjalny wątek dla tego zadania (a nie jeden z ThreadPool). Następnie możesz sprawdzić właściwości tego zadania. Jest to prosty kod na to:

var task = new Task(() => { throw new InvalidOperationException(); }, TaskCreationOptions.LongRunning); 
task.Start(); 
try { task.Wait(); } 
catch { } 

if (task.IsFaulted) 
{ 
    // do something about the exception 
    Console.WriteLine(task.Exception); 
}