虽然是try / catch,但异常是否结束了一个线程?

时间:2014-05-06 16:46:57

标签: c# multithreading

我有两个问题:

如果我有这样的方法:

public void DoMyWork()
{
   throw new MyException(anyString);
}

...我称之为async

public void DoMyWorkAsync()
{
   try
   {
      new Thread(DoMyWork).Start();
   }

   catch (MyException)
   {
      // Do anything
   }
}

首先,异常是否会被这样的try-block捕获?如果是这样,线程是否会结束,因为通常情况下线程会停止,但如果我抓住它,它也会结束,或者我是否必须实现CancellationToken呢?

2 个答案:

答案 0 :(得分:2)

1)不,它不会。必须在线程中处理线程中的异常。主线程不控制线程的执行流程,因此不会捕获异常。

2)申请将终止。更多信息:http://msdn.microsoft.com/en-us/library/ms228965(v=vs.110).aspx

答案 1 :(得分:1)

  

首先,异常是否会像try-block一样被捕获   此?

不,它不会被抓住。

您需要使用DoMyWork将代码包含在try/catch方法中以捕获该异常。

注意:它将导致"未处理的异常",任何未处理的异常都将拆除该进程(应用程序崩溃)。