我有一些代码在名为 ListofObjects 的 obj 对象列表上像这样工作:
List<SomeObject> NewListofObjects<SomeObject>();
Parallel.ForEach(ListofObjects, obj =>
//Do some operations here on obj to get a newobj
NewListofObjects.Add(newobj);
);
现在我退出了 Parallel.ForEach 循环,我想对 NewListofObjects 进行操作。但是,当我尝试执行以下操作时出现此错误:“尝试读取或写入 protected 内存。这通常表示其他内存已损坏”。
这是因为我的 NewListofObjects.Add(newobj) 方法不是线程安全的吗?如果是这样,我怎样才能使其成为线程安全的?
最佳答案
Is this because my
NewListofObjects.Add(newobj)
method is not threadsafe?
正确。它不是线程安全的。
Any instance members are not guaranteed to be thread safe.
来自 MSDN引用List<T>
(滚动到标题为“线程安全”的部分)。
If so, how can I make it threadsafe?
使用并发集合,例如 ConcurrentBag<T>
.请注意,您无法跟踪项目的插入顺序。
关于c# - 以线程安全的方式添加到 Parallel.ForEach 循环中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17416357/