【发布时间】:2016-08-05 17:22:13
【问题描述】:
我无法从同一任务之外捕获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 总是在第二个异常处停止程序(第一个异常不会导致问题)
我的期望是 Parallel.Invoke 吞下 Exception("2") 并在主线程上生成一个新的 AggregateException,可以被捕获。
这似乎可以在一台 PC 上运行,但不能在另一台 PC 上运行。
当我在没有调试器的情况下运行程序时,一切运行良好。
是否存在可能导致此问题的特定 Visual Studio 设置?
我通过点击Debugging/Exceptions/reset everything检查了是否有任何奇怪的设置,但没有改进:
其他人可以重现这个问题吗?
【问题讨论】:
-
异常设置,可能会中断所有抛出的异常?
-
我尝试在调试/异常下重置所有内容(我已更新我的问题以添加此内容)。我看不出有什么不同。而且我抛出的两个异常都是相同的基本类型:
new Exception(),但有时无法捕获Parallel.Invoke内部的异常。
标签: c# visual-studio-2010 .net-4.0 task-parallel-library