c#: 線程異常捕捉

環境:

  • 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吧!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章