观察以下伪:
ManualResetEvent[] resetEvents = new ManualResetEvent[operations.Count];
for( int i = 0; i < operations.Count; i++ )
{
resetEvents[i] = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem(new WaitCallback(timeConsumingOpHandler), resetEvents[i]);
}
WaitHandle.WaitAll(resetEvents);
如果在其中一个池线程中发生异常,我的 ASP.NET WebApp 就会死锁。响应流上没有传递异常信息。我正在寻求建议以防止这种情况发生。固定超时是可以接受的。假设 timeConsumingOpHandler Set()s 是 WaitHandle。
整个 timeConsumingOpHandler 被包装在一个 try-catch-finally 块中,在 finally 部分中 WaitHandle 是 Set()。尽管如此,还是会发生死锁。