Ala*_*rdò 0 c# linq parallel.foreach
我对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();
Run Code Online (Sandbox Code Playgroud)
如果我只是用以下命令更改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();
Run Code Online (Sandbox Code Playgroud)
在“排序依据”上,我有一个“空对象引用异常”
我不明白为什么使用foreach代码有效,但不能使用Parallel.Foreach。
您能帮我解释一下问题吗?
那么,List<T>是不是线程安全的,这就是为什么增加了result内Parallel.ForEach导致的问题。如果您坚持并行执行,请尝试使用PLinq(Parallel Linq):
IList<IEntitaAssociabile> result = praticheAperteNonAssegnate
.AsParallel()
.Select(pratica => new EntitaAssociabile() {
Id = pratica.ID_Prat,
...
})
.OrderBy(item => item.Id)
.ToList();
Run Code Online (Sandbox Code Playgroud)
.AsParallel()如果要切换到旧版Linq,请注释掉。
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |