2015-07-02 45 views
0

,我讀了修改或突變的對象在併發包包我必須把它拿出來,進行修改,然後將它放回更改ConcurrentBag中的對象?

不過,我已經看到代碼,執行以下操作:

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

其中報告是包包含的對象類型。

現在,這似乎工作。這是正確的嗎?

回答

2

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

所有的公共和保護的成員都是線程安全的,可從多個線程同時使用。但是,通過接口ConcurrentBag<T>實現的成員訪問的成員(包括擴展方法)不保證是線程安全的,並且可能需要由調用方同步。

換句話說,爲了修改或線程安全的方式在併發袋變異對象,你必須把它拿出來,進行修改,然後把它回。

+0

謝謝,那清除了:) –