LinQ并行使用实例

C#
IOrderedEnumerable<POSetModel> Iposet = datas.GroupJoin(session.
    FindList<StyleLoadingEntity>()
    .AsParallel().WithDegreeOfParallelism(Environment.ProcessorCount - 1) //使用Linq并行查询并指定查询处理器数量
    .Where(x => GlobalConstants.Lines.Contains(x.LineNumber.ToInt(0)) || x.LineNumber == 0),
    poset => poset.LoadChar_Id,
    styleLoad => styleLoad.CreatedBy,
    (poset, styleLoad) =>
    {
        var k = new POSetModel(poset);
        k.IsCurrentlyLoading = styleLoad.Select(cl => cl?.IsCurrentlyLoading ?? false).FirstOrDefault();
        k.LineNumber = styleLoad.Select(cl => cl?.LineNumber ?? 0).FirstOrDefault();
        k.RouteID = styleLoad.Select(cl => cl?.RouteID ?? 0).FirstOrDefault();
        k.Station = styleLoad.Select(cl => cl?.Workstation ?? 0).FirstOrDefault();
        k.GroupID = styleLoad.Select(cl => cl?.GroupID ?? "").FirstOrDefault();

        return k;
    })

.AsParallel().WithDegreeOfParallelism(Environment.ProcessorCount-1) 并行化以及指定并行处理器数量保留一

C#
                //并发使用List.AsParallel().ForAll替换Foreach
                posetmodels.AsParallel().WithDegreeOfParallelism(Environment.ProcessorCount - 1).ForAll(item =>
                {
                    _Producinggridmodels.Add(item);
                });

订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论
滚动至顶部