首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由- Parallel.Foreach订购

由- Parallel.Foreach订购
EN

Stack Overflow用户
提问于 2019-06-17 13:14:17
回答 1查看 236关注 0票数 0

对于LINQ "order“和Parallel.Foreach,我有一个非常奇怪的问题

具体而言,此代码工作如下:

代码语言:javascript
复制
IList<IEntitaAssociabile> result = new List<IEntitaAssociabile>();

foreach(PraticheAperteNonAssegnate pratica in praticheAperteNonAssegnate)
{
    result.Add(new EntitaAssociabile
    {
          Id = pratica.ID_Prat,
          TipologiaEntita = TipologiaEntita.Pratica,
          DataApertura = pratica.DataAper.Value,
          TipologiaPratica = pratica.Cod_TpPrat,
          NomeCliente = pratica.Nominativo,
          NumeroPraticheDaAssociare = null,
          TipologiaEntitaPadre = GetEntitaPadre(pratica, praticheLotti, praticheSottolotti),
          IdEntitaPadre = GetIdEntitaPadre(pratica, praticheLotti, praticheSottolotti)
    });
}

return result.OrderBy(x => x.Id).ToList();

如果我简单地用Parallel.Foreach更改Parallel.Foreach语句

代码语言:javascript
复制
 IList<IEntitaAssociabile> result = new List<IEntitaAssociabile>();

 Parallel.ForEach(praticheAperteNonAssegnate, (pratica) =>
 {
      result.Add(new EntitaAssociabile
      {
           Id = pratica.ID_Prat,
           TipologiaEntita = TipologiaEntita.Pratica,
           DataApertura = pratica.DataAper.Value,
           TipologiaPratica = pratica.Cod_TpPrat,
           NomeCliente = pratica.Nominativo,
           NumeroPraticheDaAssociare = null,
           TipologiaEntitaPadre = GetEntitaPadre(pratica, praticheLotti, praticheSottolotti),
           IdEntitaPadre = GetIdEntitaPadre(pratica, praticheLotti, praticheSottolotti)
      });
  });

  return result.OrderBy(x => x.Id).ToList();

关于"order“,我有一个"Null对象引用异常”

我不明白为什么使用foreach的代码工作,但不适用于Parallel.Foreach

你能帮我解释一下有什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-17 13:18:19

List<T>并不是线程安全的,这就是为什么在Parallel.ForEach中添加到result会导致问题的原因。如果坚持并行执行,请尝试PLinq (并行Linq):

代码语言:javascript
复制
IList<IEntitaAssociabile> result = praticheAperteNonAssegnate
  .AsParallel()
  .Select(pratica => new EntitaAssociabile() {
     Id = pratica.ID_Prat,
     ...
   })
  .OrderBy(item => item.Id)
  .ToList();

如果您想要切换到好的旧Linq,请注释掉.AsParallel()

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56632132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档