簡體   English   中英

TPL打破未處理的異常

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM