我有一些代码获取名为 obj 的对象列表并将它们转换为新对象 newobj,并将它们存储在列表中。
List<SomeObject> NewListofObjects<SomeObject>(); var addListLock = new object(); Parallel.ForEach(ListofObjects, obj => //Do some operations here on obj to get a newobj lock (addListLock) { NewListofObjects.Add(newobj); } ); if (NewListofObjectsCount == 2) { CombineNewObjs(NewListofObjects[0], NewListofObjects[1]); }
代码创建新对象并将它们存储在列表中就好了。但是当我到达 CombineNewObjs(在 Parallel.ForEach 循环之外)时,我收到了这个错误:“尝试读取或写入受保护的内存。这通常表明其他内存已损坏”。
如果我以非并行顺序运行该程序,它运行良好,并且它可以正确执行所有操作,直到 CombineNewObjs。问题可能是我必须以某种方式从线程中释放我的列表,以便我可以在其上执行该方法吗?