C#PLINQ AsParallel()。ForAll with Loop内部的数组调用

时间:2016-12-30 12:01:11

标签: c# .net parallel-processing task-parallel-library etl

我使用PLinq Asparallel.ForAll()编写了一个逻辑我想知道陷阱是否有所下降?

另外请告诉我如何使用Task.StartNew(()来转换此逻辑。将使用Task是更好的选择吗?

逻辑概述: 这里我有大数据(200,000行minium),我需要对每个记录进行分组和循环,检查一些条件,访问数据库,最后需要根据某些逻辑更新EF数据库。

 //Step1 
       var inputlst = DBMethed(); // Call to Database
    //Step 2 group inputlst
       var ginputLst = from p in inputlst
    group p by new 
    {
       p.ItemCode
    } into pg
    select new
    {
       ItemCode = pg.Key.ItemCode,
       ItemLst = pg.ToList()
    }

    ginputLst.Asparallel().ForAll(gItem =>
    {
         var itemDetails = GetItemDetails(ItemLst.ToList()) //DatabaseCall passing ItemCode List

         gItem.ItemLst.AsParallel().ForAll(x=>
         {
            var item = itemDetaisl.SingleOrDefault(y=> y.ItemCode = x.ItemCode)
            If(Item != null)
            {
                  IsExistItem = true;
                  StatusId = SomeLogic
            }
         });

          SomemoreLogic()
          DatabaseUpdate(gItem.ItemLst); // I am using EF to update Changed Items.
     });

与CPU紧张的工作相比,我做了很多I / O操作这是正确的方法吗?

0 个答案:

没有答案