Parallel.ForEach finally子句

时间:2012-05-03 13:57:00

标签: c# .net c#-4.0 parallel-processing

我想知道是否可以在finally中使用Parallel.ForEach

try
{
}
finally
{
}

这可能在Parallel.ForEach吗?

我需要在循环完成后再做一次。

Parallel.ForEach(someList, x =>
{
    //...
}, // Now i need to do a finally);

我的问题是我终于尝试了我的Parallel.ForEach,但我不希望最终发生。它必须仅在并行任务完成时才会发生。

所以这对我不起作用:

try
{
   Parallel.ForEach(someList, x =>
   {
      //...
   });
}
finally
{
}

还有其他方法吗?

2 个答案:

答案 0 :(得分:5)

循环和finally不一起(除了Python之外)。您只需编写代码以在循环之后运行,以及循环之后。

如果要在循环中不管异常的情况下运行它,请执行以下操作:

try
{
   Parallel.ForEach(...)
}
finally
{
   // ...
}

第二个想法,也许OP使用这个Parallel.ForEach overload,它允许你提供一个“localFinal”动作,每当一个线程(用于执行循环的一次迭代)时调用)已经完成。

答案 1 :(得分:2)

您要么将try .. finally块放在并行执行的操作中,要么在其外部:

Parallel.ForEach(someList, x =>
{
    try
    {
    }
    finally
    {
    }
});

或:

try
{
    Parallel.ForEach(someList, x =>
    {
    });
}
finally
{
}

这取决于您的用例,这个问题并不清楚。