我正在尝试实现a parallel.foreach
内部InsertOnSubmit
大部分时间一切正常,但我经常会遇到异常:
违反PRIMARY KEY约束 - 无法插入重复键
我用不同的parallelOptions尝试过它并且它不一致。我没有为循环的每次迭代使用相同的DataContext,是否有任何关于在InsertOnSubmit
循环中使用parallel.foreach
的建议?
while (myConcurrentDictionary.Count > 0)
{
Parallel.ForEach(myConcurrentDictionary, pOptions, (KVP, loopState) =>
{
pOptions.CancellationToken.ThrowIfCancellationRequested();
passCount++;
MsgLog.WriteLine(KVP.Key);
processKVP(KVP.Key, KVP.Value, loopState);
}); //End of Parallel.ForEach loop
}
processKVP()
{
...
DCtxt myDC = new DCtxt();
myDC.TABLE.InsertOnSubmit(new TABLE
{
...
});
insertCount++;
if ((insertCount % 100) == 0)
{
myDC.SubmitChanges();
}
}
答案 0 :(得分:0)
我发现了这个错误。应用程序正在调用Web服务,该服务创建带有时间戳的文件,这是导致此问题的原因。因为我并行调用Web服务,所以我有多个同时创建的文件。
因此,通过创建一个增加到十万分之一的时间戳,这个问题得到了纠正:
DateTime.Now.ToString("yyyy_MM_dd_HHmmssfffff")
感谢大家对此的评论。