并行。不要等待完整的循环

时间:2019-12-03 05:05:51

标签: c# parallel.for

我有一些仅运行几次的代码就不能正常运行。我的意思是在10%的运行中返回错误的答案。 问题在于,这段代码有时不会等待 Parallel.For 完成所有迭代,然后继续下一步。

代码在这里:

List<DataTable> TarazKolsDelimeted = new List<DataTable>(AllDelimetedDatatablesCodeKol.Count);
var res = Parallel.For(0, AllDelimetedDatatablesCodeKol.Count, (taskNumber) =>
{
    var currentTableAsnad = AllDelimetedDatatablesCodeKol[taskNumber];
    var currentTableTarazKol = _dsFullTables.Tables["tarazkol"].Clone();
    calculateTarazDaftar.CalculateTarazKol(currentTableAsnad, ref currentTableTarazKol);
    TarazKolsDelimeted.Add(currentTableTarazKol);
});

if (!res.IsCompleted)
{
    addMemoEdit("Anormal Exit !");
}

foreach (var dataTable in TarazKolsDelimeted) 
{
    foreach (DataRow dataRow in dataTable.Rows)
    {
        _dsFullTables.Tables["tarazkol"].ImportRow(dataRow);
    }
}

我设置了if(!res.IsCompleted)进行检查,但是这个'if'无法解决我的问题。

1 个答案:

答案 0 :(得分:2)

根据好的评论,我找到了答案。

存在问题

TarazKolsDelimeted.Add(currentTableTarazKol);

我必须使用锁或ConcurrentBag来解决此问题。

感谢所有朋友。