【发布时间】:2018-09-13 08:48:43
【问题描述】:
我尝试了以下代码
void Main()
{
List<int> list = new List<int>(new int[]{ 1,2,3,4,5,6,7 });
try
{
Parallel.ForEach<int>(list, i => PrintEven(i));
}
catch(AggregateException ex)
{
Console.WriteLine( ex);
}
}
private static void PrintEven(int data)
{
try
{
if(data%2 != 0)
{
throw new Exception($" {data} Not Even");
}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
throw;
}
}
PrintEven 方法的“catch”块不会打印所有奇数。这意味着 catch 块的 Console.Writeline 并不总是被执行。
当我从 PrintEven 方法的“catch”块中删除“throw”时,代码会打印所有奇数。
问题:
- 为什么从 catch 块中抛出异常会导致这种不一致?
- 如何在 catch 块中记录一些附加信息并抛出异常?
TIA。
【问题讨论】:
-
这是意料之中的。未处理的异常会导致循环立即终止。您的 parallel foreach 循环的某些任务可能已执行,有些则没有。
标签: c# parallel.foreach