平行的Foreach有时会卡住/冻结

时间:2016-04-14 02:04:17

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

所以我的并行foreach有时会卡住,在调试时我会尝试打破所有我看到的位置,并且它总是在并行foreach的开头。 它不是每次都这样做,但是当它做到这一点时,它就过了一段时间。

你们可以帮我解决一下吗?我真的不明白为什么它可能是因为每个线程都在访问checkedPogos列表

public static Task<List<string>> Checks(List<string> pogos)
{
    arret = false;

    var pogoTask= new Task<List<string>>(() =>
    {
        List<string> checkedPogos= new List<string>();
        Parallel.ForEach(pogos, (string pogo, ParallelLoopState state) =>
        {
                if (arret)
                    state.Stop();
                pogo= pogo.Trim();
                if (pogo != null && Check(pogo))
                {
                    checkedPogos.Add(pogo);
                }
        });
        return checkedPogos.Distinct().ToList();
    });
    pogoTask.Start();
    return pogoTask;
}

编辑:我已将List更改为并发集合,但仍无法解决问题。

0 个答案:

没有答案