【问题标题】:catch block not catching exception in another threadcatch 块没有在另一个线程中捕获异常
【发布时间】:2013-11-15 05:36:40
【问题描述】:
method A()
{
  try
  {
    Thread t = new Thread(new ThreadStart(B));
    t.Start();
  }
  catch(exception e)
  {
    //show message of exception
  }      

}

method B()
{
 // getDBQuery
}

B 中的异常但未被捕获。 在 .net 中是否合法?

【问题讨论】:

  • 查看this question 的回答,了解从另一个线程获取异常的方法。

标签: c# multithreading try-catch


【解决方案1】:

正确,来自线程的异常不会转发给调用者,线程应自行处理。

最普遍的答案是你不应该在这里使用(裸)线程。效率不高,也不方便。

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

【讨论】:

    【解决方案2】:

    A 完成执行时,B 可能仍在运行,因为它在独立线程上。出于这个原因,A原则上不可能捕获B 产生的所有异常。

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

    更好的是,使用Task,它允许您传播和检查异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-12
      • 2016-06-26
      • 2019-11-11
      • 2011-07-30
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多