我有這樣的代碼:爲什麼我不創造所有的作品?
List<Piezas> lstPiezasNuevas = new List<Piezas>();
Parallel.ForEach(lstNodosDB, iteradorEstructuraPlantilla =>
{
lstPiezasNuevas.Add(new Piezas()
{
FechaEstado = miFechaEstado,
HorasParcialesFallos = 0,
HorasParcialesFuncionamiento = 0,
HorasTotalesFallos = 0,
HorasTotalesFuncionamiento = 0,
IDComponente = iteradorEstructuraPlantilla.IDComponente,
//El estado por defecto al crear una pieza será no instalada.
IDEstado = 5,
NumeroSerie = null
});
});
dbContext.Piezas.AddRange(lstPiezasNuevas);
lstNodosDB有864項,我把它從數據庫中。我想爲每個節點創建一塊,所以我想使用e parallel.foreach。
我使用了一個輔助列表lstPiezasNuevas,因爲如果在parallel.Foreach中,我嘗試將新的部分添加到dbContext.Piezas中,我得到一個異常,它說它被修改的集合。所以我使用一個輔助名單。
但問題是,當我完成parallel.Forach lstPiezasNuevas只有813項,但我會有864.如果我執行該方法很多次,有時我只有805,在其他情況下可以不同,但我沒有安全感,我總是得到所有的物品。
爲什麼?如果我沒有錯,parallel.Foerach會處理源列表中的所有項目,並且我會擁有所有項目。但事實並非如此。
在我的探測中,我可以注意到比正常的foreach更好的性能,所以我想嘗試用parallel.foreach來解決這個問題。
請在將來做更多的努力來設計好代碼 - 沒有理由讓它成爲現實。另外請注意,'List'不是線程安全的,所以這可能是您的問題的一部分... –