正在更改ConcurrentBag中的对象
本文关键字:对象 ConcurrentBag | 更新日期: 2023-09-27 18:00:56
我读到,要修改或变异并发包中的对象,我必须将其取出,修改后再放回。
然而,我看到了执行以下操作的代码:
var obj = bag.FirstOrDefault(report => report.id == id);
obj.name = 'Change to something else';
其中Report是袋子所装的对象类型。
现在这似乎奏效了。这是正确的吗?
它可以工作,但不是线程安全的。参见文档:
ConcurrentBag<T>
的所有公共成员和受保护成员都是线程安全的,可以从多个线程同时使用。但是,通过ConcurrentBag<T>
实现的一个接口(包括扩展方法(访问的成员不能保证是线程安全的,可能需要由调用方进行同步。
换句话说,为了以线程安全的方式修改或变异并发包中的对象,您必须将其取出,修改后再放回。