我使用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操作这是正确的方法吗?