[英]TPL Break on unhandled exceptions
我在我的應用程序中使用async
await
以及Task.Factory.StartNew
,但我注意到的一件事是,當未處理的異常發生時,visual studio不再破壞
這是我before using await
意思
但在我將一個方法轉換為一個Task
並使用await之后
它僅在視覺工作室的輸出區域中捕獲...
順便說一下:對我來說很奇怪,因為我是.Net4.5的新手,請原諒我,如果沒有說明我需要的具體內容,那么我想知道的是
當調試器說“Exception未被用戶代碼處理”時,這意味着異常已經傳播到框架。 由於async Task
方法將其異常放在其返回的Task
,因此異常不會傳播到框架。 像這樣的例外是未被觀察到的 。
如果希望調試器在拋出異常時中斷,則使用Debugger - > Exceptions - >選中CLr Exceptions的“Thrown”框。
如果要觀察異常, 則從TaskFactory.StartNew
更改為Task.Run
並在返回的Task
上調用Wait
。 這將通過Main
傳播異常(包裝在AggregateException
),直到框架。
這就是為什么無效返回異步方法是邪惡的。
在第一種情況下,沒有捕獲異常,調試器正在提醒您這一點。
在第二種情況下,它將在結果任務上。
如果您處理方法中的異常,您將看到類似的行為。
Task.Run只是TaskFactory.StartNew的簡化版本: Task.Run vs Task.Factory.StartNew
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.