catch块在另一个线程中没有捕获异常

时间:2013-11-04 14:57:54

标签: c# multithreading try-catch

method A()
{
  try
  {
    Thread t = new Thread(new ThreadStart(B));
    t.Start();
  }
  catch(exception e)
  {
    //show message of exception
  }      

}

method B()
{
 // getDBQuery
}

B中的例外情况但没有抓到。 它在.net中合法吗?

2 个答案:

答案 0 :(得分:6)

正确,Thread的异常不会转发给调用者,Thread应该自己处理。

最常见的答案是你不应该在这里使用(裸)线程。它效率低,不方便。

当您使用Task时,在您调用Wait()Result时会存储并引发异常。

答案 1 :(得分:4)

A完成执行时,B可能仍然在独立线程上运行。出于这个原因,A

将try-catch移到B的内部。 B类不转发异常。

更好的是,使用Thread来传播和检查异常。