阻止visual studio在任务中打破exception

我有以下代码:

Task load = Task.Factory.StartNew(() => {//Some Stuff Which Throws an Exception}); try { load.Wait(); } catch (AggregateException ex) { MessageBox.Show("Error!"); } 

当任务中抛出一个exception时,我希望它在try catch中被冒泡,而不是在导致exception的时候打破visual studio。

我尝试谷歌和一些建议我在我的方法上添加这个[DebuggerHidden]但它不起作用

好的我发现了怎么做。 答案就在笔记部分

启用“只是我的代码”时,Visual Studio在某些情况下会在抛出exception的行上中断,并显示一条错误消息,指出“exception不由用户代码处理”。 这个错误是良性的。 您可以按F5继续并查看这些示例中演示的exception处理行为。 要防止Visual Studio在第一个错误中出现问题,只需取消选中Tools,Options,Debugging,General下的Enable Just My Code复选框。

从VS的角度来看,从委托传递到任务的exception与任何其他exception之间确实没有任何不同。

在一般情况下无法解决这个问题。

但是,您可以做的一件事是利用这样一个事实:当重新抛出exception时,它被包装在AggregateException 。 抛出AggregateException时可能会中断,但不会抛出其他exception。

您可以转到Debug – > Exceptions,取消选择所有CLRexception,但随后重新启用聚合exception:

在此处输入图像描述

它现在不会在Task主体中暂停,但会在您调用Wait时暂停调试器。

不幸的副作用是,您现在不再在程序中的任何其他位置暂停任何其他exception,即使它们不在传递给Task的委托中。

要关闭例外停止,请按“Ctrl + Alt + E”。 这将打开“例外”窗口。 解开“Common Language Runtime Exceptions – Thrown”。