- Multithreading in C# 5.0 Cookbook
- Eugene Agafonov
- 316字
- 2021-07-21 18:10:00
Handling exceptions
This recipe will describe how to handle exceptions in other threads properly. It is very important to always place a try/catch
block inside the thread because it is not possible to catch an exception outside a thread's code.
Getting ready
To work through this recipe, you will need Visual Studio 2012. There are no other prerequisites. The source code for this recipe can be found at BookSamples\Chapter1\Recipe11
.
How to do it...
To understand the handling of exceptions in other threads, perform the following steps:
- Start Visual Studio 2012. Create a new C# Console Application project.
- In the
Program.cs
file add the followingusing
directives:using System; using System.Threading;
- Add the following code snippet below the
Main
method: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); } }
- Add the following code snippet inside the
Main
method: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!"); }
- Run the program.
How it works...
When the main program starts, it defines two threads that will throw an exception. One of these threads handles exception, while the other does not. You can see that the second exception is not caught by a try/catch
block around a code that starts the thread. So if you work with threads directly, the general rule is to not throw an exception from a thread, but to use a try/catch
block inside a thread code instead.
In the older versions of .NET Framework (1.0 and 1.1), this behavior was different and uncaught exceptions did not force an application shutdown. It is possible to use this policy by adding an application configuration file (such as app.config
) containing the following code snippet:
<configuration> <runtime> <legacyUnhandledExceptionPolicy enabled="1" /> </runtime> </configuration>
- HornetQ Messaging Developer’s Guide
- PostgreSQL技術內幕:事務處理深度探索
- Learn Programming in Python with Cody Jackson
- 深入淺出Android Jetpack
- INSTANT Passbook App Development for iOS How-to
- Visual FoxPro程序設計習題集及實驗指導(第四版)
- 深入實踐DDD:以DSL驅動復雜軟件開發
- NGUI for Unity
- 超簡單:用Python讓Excel飛起來(實戰150例)
- Java Web開發教程:基于Struts2+Hibernate+Spring
- 游戲設計的底層邏輯
- 開源網絡地圖可視化:基于Leaflet的在線地圖開發
- 軟件定義存儲:原理、實踐與生態
- Android for the BeagleBone Black
- 零基礎學Java項目開發