Élő kódból. Az első megoldás jól működik, a második nem, mi lehet az oka? A hibajelenség, hogy az első beállítja a TickerId-t az objektumon belül, a második nem.
Parallel.For(0, tickOhlcs.Count, i => tickOhlcs[i].SetTickerId(key.TickerId)); Parallel.ForEach(tickOhlcs, tickOhlc => tickOhlc.SetTickerId(key.TickerId));
Could you hire me? Contact me if you like what I’ve done in this article and think I can create value for your company with my skills.
LEAVE A COMMENT
4 COMMENTS
A második IEnumerable-t vár. Esetleg hibás az IEnumerable vagy IEnumerator implementációja? Pl. a MoveNext már első kérdésre azt mondja, hogy nincs tovább.
Valójában hibás a kérdés, ha a bemeneti kollekció tömb, akkor jól működik a for, ha List, akkor a for sem.
A kulcs az, hogy a kollekció structokat tartalmaz, nem classokat.
Aham. Tehát a List indexere másol (visszetér az i. elemmmel a backing arrayből), ezért “elromlik” a For, a Foreach esetében meg persze, hogy másol, akármi van. Ellenben az array esetében a startOfArray+index*sizeof(structtype) memóriacímen található structon dolgozik és nem másol.
Igen, ez az ok, a struktúra másolódik vagy boxolódik (nem néztem meg mélyebben), így a másolaton fut let a setter.
Mindig mondom tanfolyamokon, hogy a strukúrák elég speciális állatfajok, okkal kell csak bevetni őket.