1. 程式人生 > >多線程之異常處理

多線程之異常處理

ring read pre ons recipe join() rom 內部 應用

using System;
using System.Threading;

namespace Chapter1.Recipe11
{
    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!"); } Console.ReadKey(); } static void BadFaultyThread() { Console.WriteLine("Starting a faulty 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("Boom!"); }
catch (Exception ex) { Console.WriteLine("Exception handled: {0}", ex.Message); } } } }

在線程中始終使用try...catch代碼塊捕獲異常是非常重要的,因為這不可能在線程代碼之外來捕獲異常。原則上說,每個線程的業務異常應該在自己的內部處理完畢。

參考:

多線程之異常處理