method A()
{
try
{
Thread t = new Thread(new ThreadStart(B));
t.Start();
}
catch(exception e)
{
//show message of exception
}
}
method B()
{
// getDBQuery
}
B中的例外情况但没有抓到。 它在.net中合法吗?
答案 0 :(得分:6)
正确,Thread的异常不会转发给调用者,Thread应该自己处理。
最常见的答案是你不应该在这里使用(裸)线程。它效率低,不方便。
当您使用Task时,在您调用Wait()
或Result
时会存储并引发异常。
答案 1 :(得分:4)
当A
完成执行时,B
可能仍然在独立线程上运行。出于这个原因,A
将try-catch移到B
的内部。 B
类不转发异常。
更好的是,使用Thread
来传播和检查异常。