问题描述: 在使用并行的foreach循环时,线程可能在任务完成前被关闭,导致任务没有完成。
解决方法: 在使用并行的foreach循环时,可以使用一些方法来确保线程在任务完成前不被关闭。
ParallelOptions options = new ParallelOptions
{
MaxDegreeOfParallelism = Environment.ProcessorCount // 设置并行度为CPU核心数
};
Parallel.ForEach(collection, options, item =>
{
// 执行任务
});
CancellationTokenSource cts = new CancellationTokenSource();
CancellationToken token = cts.Token;
Parallel.ForEach(collection, item =>
{
if (token.IsCancellationRequested)
{
// 任务被取消
return;
}
// 执行任务
if (taskFinished) // 根据任务完成状态判断是否取消任务
{
cts.Cancel();
}
});
ParallelLoopResult result = Parallel.ForEach(collection, item =>
{
// 执行任务
});
result.Wait(); // 等待所有任务完成
总结: 以上是三种常见的解决方法,可以根据具体情况选择适合的方法来确保并行的foreach在线程完成之前不被关闭。