多線程之異常處理
阿新 • • 發佈:2018-07-03
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代碼塊捕獲異常是非常重要的,因為這不可能在線程代碼之外來捕獲異常。原則上說,每個線程的業務異常應該在自己的內部處理完畢。
參考:
多線程之異常處理