C# 平行。用于don';不要等待完成所有循环

C# 平行。用于don';不要等待完成所有循环,c#,parallel.for,C#,Parallel.for,我有一些代码,只是运行了几次不正常。我的意思是在10%的运行中,它返回错误的答案。 问题是,这段代码有时不等待并行。等待完成所有迭代并进入下一步 代码如下: List<DataTable> TarazKolsDelimeted = new List<DataTable>(AllDelimetedDatatablesCodeKol.Count); var res = Parallel.For(0, AllDelimetedDatatablesCodeKol.Count, (

我有一些代码,只是运行了几次不正常。我的意思是在10%的运行中,它返回错误的答案。 问题是,这段代码有时不等待并行。等待完成所有迭代并进入下一步

代码如下:

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);
    }
}
List-tarazkolsdelimited=新列表(alldelimetedatatablescodekol.Count);
var res=Parallel.For(0,AllDelimetedDatatablesCodeKol.Count,(任务编号)=>
{
var currentTableAsnad=AllDelimeterdDataTablesCodekol[taskNumber];
var currentTableTarazKol=_dsFullTables.Tables[“tarazkol”].Clone();
CalculateRazDaftar.CalculateRazkol(currentTableAsnad,参考currentTableTarazKol);
添加(currentTableTarazKol);
});
如果(!res.IsCompleted)
{
addMemoEdit(“异常退出!”);
}
foreach(Tarazkolsdelimited中的var数据表)
{
foreach(dataTable.Rows中的DataRow-DataRow)
{
_dsFullTables.Tables[“tarazkol”].ImportRow(数据行);
}
}

我将if(!res.IsCompleted)设置为检查,但此“if”无法解决我的问题

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

问题出在

TarazKolsDelimeted.Add(currentTableTarazKol);
只是我必须使用lock或ConcurrentBag来解决这个问题


感谢所有朋友。

循环中的一个命令引发异常?@Brannon我没有收到任何异常,只是有些时候回答不完整。该代码看起来并不安全<代码>列表不是线程安全的。我怀疑这就是你的问题所在,而不是它过早地退出(我不相信它是这样的)。不要从Parallel.For中修改列表。请看一下ConcurrentBag。