mam kawałek kodu, który działa w ten sposób na liście obiektów OBJ zwane ListofObjects:Dodanie do listy w pętli Parallel.ForEach w THREADSAFE sposób
List<SomeObject> NewListofObjects<SomeObject>();
Parallel.ForEach(ListofObjects, obj =>
//Do some operations here on obj to get a newobj
NewListofObjects.Add(newobj);
);
Teraz jestem z równoległym .Dla pętli i chcę wykonać operację na NewListofObjects. Jednak pojawia się ten błąd, gdy próbuję: "Próba odczytu lub zapisu pamięci chronionej często wskazuje, że inna pamięć jest uszkodzona".
Czy to dlatego, że moja metoda NewListofObjects.Add (newobj) nie jest bezpieczna dla wątków? Jeśli tak, w jaki sposób mogę ją chronić w wątkach?
jakie operacje wykonujesz wewnątrz (od obj, aby dostać się do newobj)? – terrybozzio
Długi bałagan operacji, które trudno opisać ... ale wszystkie są zmiennymi lokalnymi utworzonymi w ramach każdej iteracji listy obiektów. Masz jednak rację, pytając o to ... Nie wykluczyłem, że wszystkie operacje wykonywane na obiekcie mogą być również przyczyną tego konkretnego problemu. – Conor