环境:
- window 10
- vs2019 16.5.1
- .net framework 4.5
参照: 线程(thread)
先说结论:
在线程创建时任何生效的try/catch/finally语句块在线程开始执行后都与线程无关,线程的异常处理要在线程调用方法内部。
测试代码如下:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
try
{
new Thread(() =>
{
throw new Exception("测试线程异常!");
}).Start();
}
catch (Exception ex)
{
//代码永远不会运行到这里
Console.WriteLine("ex:" + ex.Message);
}
Console.WriteLine("ok");
Console.ReadLine();
}
}
}
直接ctrl+F5运行:
调试运行:
可以看到,线程内的异常无法在线程外捕捉,所以线程内的异常还是在线程内加上try/catch吧!