我有一些仅运行几次的代码就不能正常运行。我的意思是在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'无法解决我的问题。
答案 0 :(得分:2)
根据好的评论,我找到了答案。
存在问题
TarazKolsDelimeted.Add(currentTableTarazKol);
我必须使用锁或ConcurrentBag来解决此问题。
感谢所有朋友。