当主程序启动时,定义了两个将会抛出异常的线程。其中一个在方法内部对异常进行了处理,另一个则没有。可以看到第二个异常没有被包裹启动线程的try/catch代码块捕获到。所以如果直接使用线程,一般来说不要在线程中抛出异常,而是在线程内部代码中使用try/catch代码块!
using System;
using System.Threading;
namespace 异常处理
{
class Program
{
static void Main(string[] args)
{
var t = new Thread(FaultyThread);
t.Start();
t.Join();
try
{
t = new Thread(BadFaultyThread);
t.Start();
}
catch (Exception ex)
{
Console.WriteLine("We won't get here");
}
}
static void BadFaultyThread()
{
Console.WriteLine("Starting a fault thread...");
Thread.Sleep(TimeSpan.FromSeconds(2));
throw new Exception("Boom");
}
static void FaultyThread()
{
try
{
Console.WriteLine("Starting a faulty thread...");
Thread.Sleep(TimeSpan.FromSeconds(1));
throw new Exception("Boom1");
}
catch (Exception ex)
{
Console.WriteLine("Exception handled: {0}", ex.Message);
}
}
}
}
原文地址:https://blog.youkuaiyun.com/qq_35445058/article/details/80728819