次の擬似を観察します。
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 が WaitHandle を Set() するとします。
timeConsumingOpHandler 全体が try-catch-finally ブロックにラップされ、finally セクションで WaitHandle が Set() になります。それでも、デッドロックが発生します。