[英]catch block not catching exception in another thread
method A()
{
try
{
Thread t = new Thread(new ThreadStart(B));
t.Start();
}
catch(exception e)
{
//show message of exception
}
}
method B()
{
// getDBQuery
}
B中的例外但沒有捕獲。 它在.net中合法嗎?
正確,Thread中的異常不會轉發給調用者,Thread應該自己處理。
最一般的答案是你不應該在這里使用(裸)線程。 它效率不高,不方便。
使用任務時 ,在調用Wait()
或Result
時會存儲並引發異常。
當A
完成執行時, B
可能仍然在獨立線程上運行。 因此, A
原則上不可能捕獲B
產生的所有異常。
將try-catch移動到B
內部。 Thread
類不轉發異常。
更好的是,使用允許您傳播和檢查異常的Task
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.