1

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

try
{
}
finally
{
}

这是可能的Parallel.ForEach吗?

当循环完成时,我需要做一个 finally。

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

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

所以这对我不起作用:

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

是否有另一种方法可以做到这一点?

4

2 回答 2

5

循环并且finally不要一起使用(可能在Python中除外)。您只需编写代码以在循环之后运行,好吧,在循环之后。

如果您想运行它而不考虑循环中的异常,请执行以下操作:

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

再想一想,可能是使用此 Parallel.ForEach重载的 OP ,它允许您提供“localFinal”操作,只要线程(用于执行循环的另一次迭代)完成,就会调用该操作。

于 2012-05-03T13:58:39.667 回答
2

try .. finally您可以在并行执行的操作内部或外部放置一个块:

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

或者:

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

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

于 2012-05-03T14:00:01.597 回答