gpt4 book ai didi

c# - 以线程安全的方式添加到 Parallel.ForEach 循环中的列表

转载 作者:可可西里 更新时间:2023-11-01 08:00:41 25 4
gpt4 key购买 nike

我有一些代码在名为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com