Visual Studio 2010中的Parallel.Invoke中的不可捕捉的异常

问题描述:

我在捕获在同一任务之外的Parallel.Invoke任务中抛出的异常时遇到了问题。Visual Studio 2010中的Parallel.Invoke中的不可捕捉的异常

在某些PC上,这样的例外总会导致程序进入调试器,即使所有内容都在try catch块中。

在其他PC上,这样的异常将被包装在AggregateException中,该异常可以在主线程中捕获。

下面的程序运行在一台PC上的精细,印刷"I don't care" & "whatever"

static void Main(string[] args) 
{ 
    try 
    { 
     throw new Exception("1"); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine("I don't care"); 
    } 


    try 
    { 
     System.Threading.Tasks.Parallel.Invoke(
      new Action[]{ 
       ()=>{throw new Exception("2");}, 
      }); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine("whatever"); 
    } 
} 

但另一台PC上时,Visual Studio始终停止在第二个例外的程序(第一异常会导致没有问题)

enter image description here

我的期望是,Parallel.Invoke吞下Exception("2")并生成一个新的主线程上的,可以被捕获。

这似乎适用于一台PC,但不适用于另一台PC。

当我没有调试器运行程序时,一切运行良好。

是否有特定的Visual Studio设置可能导致此?

我检查是否有点击Debugging/Exceptions/reset everything任何奇怪的设置,但没有改进:

enter image description here

可谁都重现此问题?

+0

例外设置,打破所有抛出的异常也许吧? – leppie

+0

我试着在调试/例外情况下重置所有东西(我已经更新了我的问题以添加此内容)。我看不出有什么区别。我抛出的两个异常都是相同的基本类型:'new Exception()',但是'Parallel.Invoke'中只有一个不能被捕获。 – HugoRune

我发现这个怪异行为的原因:

当设置just my code启用,Visual Studio将总是打破的Parallel.Invoke内异常的,即使最终AggregateExpection正陷入用户代码

当该设置为禁用,Visual Studio将内部没有Parallel.Invoke异常的突破。只有在未捕获到该异常的情况下,它才会中断所产生的AggregateException。

enter image description here

为了防止视觉工作室从打破捕捉到的异常,同时保持设置just my code启用,你必须打开Debugging/Exceptions

"Common language Runtime Exceptions/User-unhandled" 

小心删除复选标记:此不是默认设置,当您点击reset all时,此设置将恢复。

与删除此复选标记后听起来相反,Visual Studio仍会在未处理的异常(即不在任何try-catch块内的异常)上中断。

enter image description here