2013-11-04 52 views
2
method A() 
{ 
    try 
    { 
    Thread t = new Thread(new ThreadStart(B)); 
    t.Start(); 
    } 
    catch(exception e) 
    { 
    //show message of exception 
    }  

} 

method B() 
{ 
// getDBQuery 
} 

B中有一個例外,但沒有捕獲到。 它在.net中是否合法?catch block在另一個線程中沒有捕捉異常

+0

查看對[此問題](http://stackoverflow.com/q/5983779/395718)的答案,瞭解從另一個線程獲取異常的方法。 – Dialecticus

回答

4

A完成時,執行B可能仍然在運行,因爲它在獨立線程上。由於這個原因,原則上不可能A捕獲B產生的所有異常。

將try-catch移動到B的內部。 Thread類不轉發異常。

更好的是,使用Task它允許您傳播和檢查異常。

6

更正,來自線程的異常不會被轉發給調用者,線程應該自己處理它。

最普遍的答案是,你不應該在這裏使用(裸)線程。效率不高,不方便。

當您使用Task時,當您調用Wait()Result時,存儲和引發異常。