1

我正在尝试实现a parallel.foreach它内部有一个InsertOnSubmit

大多数时候一切正常,但我经常遇到异常:

违反 PRIMARY KEY 约束 - 无法插入重复键

我用不同的parallelOptions 尝试过它并不一致。我没有为循环的每次迭代使用相同的 DataContext,有什么建议可以InsertOnSubmitparallel.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();
    }
}
4

1 回答 1

0

我发现了这个错误是什么。该应用程序正在调用一个 Web 服务,该服务创建带有时间戳的文件,这是导致此问题的原因。因为我正在并行调用 Web 服务,所以我同时创建了多个文件。

因此,通过创建一个增加到千分之一的时间戳,这个问题得到了纠正:

DateTime.Now.ToString("yyyy_MM_dd_HHmmssfffff")

感谢大家对此的评论。

于 2013-05-09T16:12:59.980 回答