2010-07-08 47 views
1

我需要在構建MVC頁面時調用一些web服務,所以我通過線程池對線程進行線程化,並使用ManualResetEvents來確定何時獲得了我的結果。在MVC應用程序中跨線程傳遞異常

如果其中一個線程拋出異常,它會崩潰應用程序。我通過過濾器設置了異常處理,但我需要首先將異常返回到主要呈現線程。

我無法使用BackgroundWorker,因爲我需要「連接」工作並呈現頁面。

對此提出建議?任何人?

回答

2

您可以保留一個有例外的隊列,並且在最終設置了ManualResetEvent時,請在繼續之前檢查隊列。

private readonly Queue<Exception> _exceptions = new Queue<Exception>(); 


private void DoWork(object o) 
{ 
    try 
    { 
     // ... 
    } 
    catch (Exception ex) 
    { 
     _exceptions.Enqueue(ex); 
    } 
    finally 
    { 
     done.Set(); 
    } 
} 
+0

好通話混沌。我希望有更通用的東西(我爲此創建了一個基於LINQ的DSL),但是我想我可以在異常隊列中工作,而不會遇到太多麻煩。謝謝。 – 2010-07-08 21:49:19