2013-02-26 2 views
5

У меня есть интеграционный тест, который использует несколько потоков. Я бы хотел, чтобы какой-либо поток мог пропустить тест (и оторвать остальные). Однако исключение на фоне потоке вызывает MSTest на провал - вы просто получите сообщение об ошибке:Сбой MSTest из фоновых потоков

The agent process was stopped while the test was running

Я полагаю, я мог бы поймать какие-либо исключения на фоне потоках и просыпаюсь основной поток провалить тест, но там более простой/элегантный способ?

+1

Вы должны блокировать «основной» поток (тест бегун нити), пока фоновый поток не завершил - то неудачно с 'Assert' на тест бегун резьбы , если вы не заблокируете этот поток, бегун может выйти до завершения фонового потока. Если вы представите пример того, что вы пробовали, кто-то, возможно, даст вам альтернативу. –

ответ

0

Если вам абсолютно необходимо использовать разные темы (и не ThreadPool один), вы можете использовать Task с TaskCreationOptions.LongRunning вариант, который будет создавать специальную нить для выполнения этой задачи (и не один из ThreadPool). Затем вы можете изучить IsFaulted и Exception свойства этой задачи. Это простой код, который:

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); 
} 
Смежные вопросы