【发布时间】:2019-06-17 13:14:17
【问题描述】:
LINQ“order by”和Parallel.Foreach有一个非常奇怪的问题
具体来说,这段代码有效:
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();
如果我只是将foreach 语句更改为Parallel.Foreach:
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 by”我有一个“Null object reference exception”
我不明白为什么 foreach 代码可以工作,而 Parallel.Foreach 不能工作。
你能帮我解释一下是什么问题吗?
【问题讨论】:
-
请用英文写代码。
-
好吧,看看
StackTrace,一旦你知道实际引发 NRE 的那一行,请尝试修复它。 -
我想说这个用例的并行 foreach 没有用。
-
用锁试试(储物柜)
标签: c# linq parallel.foreach