iT邦幫忙

2022 iThome 鐵人賽

DAY 6
0
Software Development

離開C#新手村的最後試煉系列 第 6

試煉6- Console 程式的例外處理

  • 分享至 

  • xImage
  •  

開始試煉

Exception 是程式出錯時產生的 在MVC 還是Webapi 都有 global exception handling
的處理方式 但是 Console 程式 也要處理 沒有抓到的exception
這樣的程式 出例外了 程式就停止執行了

void Main()
{
    throw new Exception("2");
}

這時候可以用
AppDomain.UnhandledException 事件
簡單範例如下

void Main()
{
	var currentDomain = AppDomain.CurrentDomain;
	currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);

	throw new Exception("2");
}
static void MyHandler(object sender, UnhandledExceptionEventArgs args)
{
	var exception = (Exception)args.ExceptionObject;
	Console.WriteLine($"MyHandler : {exception}");
}

結果會是
MyHandler : System.Exception: 2
於 UserQuery.Main() 於 C:\Users\Demo\AppData\Local\Temp\LINQPad5_uymhsjky\query_mjrekd.cs: 行 34
於 LINQPad.ExecutionModel.ClrQueryRunner.Run()
於 LINQPad.ExecutionModel.Server.RunQuery(QueryRunner runner)
於 LINQPad.ExecutionModel.Server.StartQuery(QueryRunner runner)
於 LINQPad.ExecutionModel.Server.<>c__DisplayClass151_0.b__0()
於 LINQPad.ExecutionModel.Server.SingleThreadExecuter.Work()
於 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
於 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
於 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
於 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
於 System.Threading.ThreadHelper.ThreadStart()

延伸試煉

有用到 Task 又是另一個問題了上面作法會失效 可以參考下面文章
如何正確捕捉 Task 例外

結束試煉

例外處理一直都是很重要的試煉,接下來還會有相關試煉出現

參考
在 .NET Core 主控台應用程式中全域捕捉未處理的例外


上一篇
試煉5 - const 的坑踩過嗎
下一篇
試煉7 - 學會正確拋例外前,可不能離開新手村
系列文
離開C#新手村的最後試煉30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言