環境:
- 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吧!