4

我有一个Parallel.Foreach让我悲伤的循环,想看看你们中的一个人是否可以对此有所了解。不幸的是,几乎找不到谷歌搜索。

这是结:

我的 foreach 循环:

string [] Ids = {........}; //a string array of ID's
using(IUnitOfWork uw = GetUnitOfWork())
     {
            Parallel.ForEach(Ids, currentRecord =>
            {
                var x = (from h in uw.GetRepository<EFEntity1>().AsQueryable()
                         join k in uw.GetRepository<EFEntity2>().AsQueryable()
                         on h.ID equals k.ID
                         join l in uw.GetRepository<EFEntity3>().AsQueryable() on 
                          h.FundAccount equals l.FundAccount
                         where h.ID == currentRecord
                         select new { h.x, h.y, h.z});
                foreach (var v in x)
                {
                    if (v.SomeMember == "foo")
                    {

                    }
                    Console.WriteLine("Output : {0} {1} {2} {3} {4} ", v.x, 
                                      v.y, v.z);
                }
            });
        }

LINQ 语句是我ArgumentExcpetion抛出的一个说法:

已添加具有相同密钥的项目

在这种情况下我对 foreach 循环的实现可能有什么问题的任何线索?

感谢支持。

谢谢

4

1 回答 1

4

我通过将 using 括号移动到 Parellel 循环中解决了这个问题。原因是 dbcontext 不是线程安全的。

于 2014-10-10T14:09:34.840 回答