Parallel.ForEach在最终迭代期间冻结

时间:2015-06-19 18:53:54

标签: c# linq task-parallel-library

这是我第一次与$(document).ready(function(){ var t = setInterval("$('div').toggle()", 1000); }); 合作,我遇到了问题。这是一个耻辱,因为我真的需要这个程序的性能,我得到它。

我会在最后一次迭代中说我的ForEach冻结了。这不会暴露任何错误消息。 Parrllel.ForEach停止了。当我在调试器中暂停时,ConsoleWriteLine()的范围会突出显示。

Parallel.ForEach

CheckInventory()方法的最后一个阶段是创建匹配记录

   using (DBDataContext db = DataContextFactory.GetThreadScopedDataContext<DBDataContext>())
            {
                products = (from r in db.tbl_products
                           where r.date >= _dateCheck
                           select r

                ).ToList();

                int rcount = products.Count();

                Console.WriteLine("Total products: {0}", rcount);

                Parallel.ForEach(products, new ParallelOptions { MaxDegreeOfParallelism = 8 }, product =>
                {
                    DBDataContext db2 = DataContextFactory.GetThreadScopedDataContext<DBDataContext>();


                    CheckInventory(product, db2);


                });

                Console.WriteLine("Ended Inventory Check {0}", DateTime.Now);
            }

我已经浏览了整个网络,试图找到导致这种情况的原因,但我没有运气。这是一个简单的控制台应用程序,每晚运行。

此后它锁定VS无法编译项目,除非我重新启动VS.我收到此错误消息。

  private static void AddNewInventoryMatch(tbl_product product, tbl_inventory item, int matchType)
        {


            DBDataContext db = DataContextFactory.GetThreadScopedDataContext<DBDataContext>("4");

            tbl_inventoryMatch newMatch = new tbl_inventoryMatch();
          //... Add records



            db.tbl_inventoryMatches.InsertOnSubmit(newMatch);
            //  db.SubmitChanges();


        }

链接: DataContextFactory = http://weblog.west-wind.com/posts/2008/Feb/05/Linq-to-SQL-DataContext-Lifetime-Management

1 个答案:

答案 0 :(得分:1)

我很久以前遇到同样的问题,请尝试使用GetDataContext代替GetThreadScopedDataContext