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

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