阻止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”。