遵守下列僞:如何安全地使用WaitHandles來防止死鎖?
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 Web應用程序被死鎖發生異常的情況。響應流上沒有傳遞異常信息。 我正在尋求防止這種情況的建議。固定超時是可以接受的。 假設timeConsumingOpHandler Set()是WaitHandle。
整個timeConsumingOpHandler被封裝在finally節中的WaitHandle被設置爲()的try-catch-finally塊中。無論如何,發生死鎖。
一個很好的提示。謝謝。 – Kivin 2009-02-20 22:22:16