В моем методе я запускаю несколько потоков, а затем жду, пока они закончат свою работу (что-то вроде шаблона fork-join).
using (var countdownEvent = new CountdownEvent(runningThreadsCount))
{
for (int i = 0; i < threadsCount; i++)
{
var thread = new Thread(new ThreadStart(delegate
{
// Do something
countdownEvent.Signal();
}));
thread.Start();
}
countdownEvent.Wait();
}
Теперь мне нужно иметь возможность перехватить исключение в этих потоках (допустим, что // Do something
может вызвать исключение), передать исключение в основной поток, разблокировать его (так как оно ожидает countdownEvent
) и повторно брось исключение.
Какой самый элегантный способ добиться этого?