我想知道是否可以在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
{
}
还有其他方法吗?
答案 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
{
}
这取决于您的用例,这个问题并不清楚。