簡體   English   中英

阻止 Visual Studio 打破任務中的異常

[英]Stop Visual Studio from breaking on exception in Tasks

我有以下代碼:

Task load = Task.Factory.StartNew(() => {//Some Stuff Which Throws an Exception});

try
{
    load.Wait();
}
catch (AggregateException ex)
{
    MessageBox.Show("Error!");
}

每當 Task 中拋出異常時,我希望它冒泡並被 try catch 捕獲,而不是 Visual Studio 在導致異常時中斷。

我試過谷歌,有人建議我在我的方法之上添加這個[DebuggerHidden] ,但它不起作用。

好的,我知道怎么做。 答案是正確的這里的說明部分

啟用“僅我的代碼”后,Visual Studio 在某些情況下會在引發異常的行中斷並顯示一條錯誤消息,指出“異常未由用戶代碼處理”。 這個錯誤是良性的。 您可以按 F5 繼續並查看這些示例中演示的異常處理行為。 為防止 Visual Studio 因第一個錯誤而中斷,只需取消選中工具、選項、調試、常規下的啟用僅我的代碼復選框。

從 VS 的角度來看,從傳遞給 Task 的委托中拋出的異常與任何其他異常之間確實沒有任何區別。

在一般情況下沒有辦法解決這個問題。

但是,您可以做的一件事是利用這樣一個事實,即當重新拋出異常時,它被包裝在一個AggregateException 當拋出AggregateException而不是其他異常時,您可能會中斷。

您可以轉到 Debug -> Exceptions,取消選擇所有 CLR 異常,然后重新啟用聚合異常:

在此處輸入圖片說明

它現在不會在Task主體中暫停,但會在您調用Wait時暫停調試器。

不幸的副作用是,您現在將不再因程序中其他任何地方的任何其他異常而暫停,即使它們不在傳遞給Task的委托中。

要關閉異常停止,請按“Ctrl + Alt + E”。 這將打開例外窗口。 取消勾選“公共語言運行時異常 - 拋出”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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