我有以下代码:
Task load = Task.Factory.StartNew(() => {//Some Stuff Which Throws an Exception});
try
{
load.Wait();
}
catch (AggregateException ex)
{
MessageBox.Show("Error!");
}
当任务中抛出一个异常时,我希望它在try catch中被冒泡,而不是在导致异常的时候打破visual studio。
我尝试了谷歌,有些人建议我在我的方法上添加此[DebuggerHidden]
,但它不起作用
答案 0 :(得分:25)
好的,我发现了怎么做。答案是正确的here在备注部分
当启用“Just My Code”时,Visual Studio在某些情况下会在抛出异常的行上中断,并显示一条错误消息,指出“异常未由用户代码处理”。这个错误是良性的。您可以按F5继续并查看这些示例中演示的异常处理行为。 要阻止Visual Studio在第一个错误中出现问题,只需取消选中“工具”,“选项”,“调试”,“常规”下的“启用我的代码”复选框。
答案 1 :(得分:6)
从VS的角度来看,从委托传递到任务的异常与任何其他异常之间确实没有任何不同。
在一般情况下无法解决这个问题。
然而,你可以做的一件事是利用这样一个事实:当重新抛出异常时,它被包裹在AggregateException
中。当抛出AggregateException
而不是其他例外时,你可能会中断。
你可以去调试 - >例外,取消选择所有CLR异常,但随后重新启用聚合异常:
它现在不会在Task
正文中暂停,但会在您拨打Wait
时暂停调试器。
不幸的副作用是,您现在不再停留在程序中任何其他位置的任何其他异常,即使它们不在传递给Task
的委托中。
答案 2 :(得分:0)
要关闭例外停止,请按“Ctrl + Alt + E”。这将打开“例外”窗口。解开“公共语言运行时异常 - 抛出”。