2015-07-02 42 views
0

,我读了修改或突变的对象在并发包包我必须把它拿出来,进行修改,然后将它放回更改ConcurrentBag中的对象?

不过,我已经看到代码,执行以下操作:

var obj = bag.FirstOrDefault(report => report.id == id); 
obj.name = 'Change to something else'; 

其中报告是包包含的对象类型。

现在,这似乎工作。这是正确的吗?

回答

2

它可以工作,但它不是线程安全的。见docs:中ConcurrentBag<T>

所有的公共和保护的成员都是线程安全的,可从多个线程同时使用。但是,通过接口ConcurrentBag<T>实现的成员访问的成员(包括扩展方法)不保证是线程安全的,并且可能需要由调用方同步。

换句话说,为了修改或线程安全的方式在并发袋变异对象,你必须把它拿出来,进行修改,然后把它回。

+0

谢谢,那清除了:) –