【发布时间】:2019-12-03 05:05:51
【问题描述】:
我有一些代码运行了几次就不行了。我的意思是在 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' 不能解决我的问题。
【问题讨论】:
-
循环中的某个命令抛出异常?
-
@Brannon 我没有得到任何异常,只是有时答案不完整
-
这段代码看起来并不安全。
List<Datatable>不是线程安全的。我怀疑这就是您的问题所在,而不是过早退出(我不相信它确实如此)。 -
向 List
添加内容不是线程安全的。不要从 Parallel.For 修改 List 。改为查看 ConcurrentBag 。
标签: c# parallel.for