簡體   English   中英

更改ConcurrentBag中的對象?

[英]Changing object in a ConcurrentBag?

我讀到要在並發包中修改或變異對象,我必須將其取出,修改然后放回去。

但是,我看到了執行以下操作的代碼:

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

其中,Report是袋子包含的對象類型。

現在,這似乎可行。 這是正確的嗎?

它可以工作,但是不是線程安全的。 文檔

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

換句話說,為了以線程安全的方式修改並發包中的對象,您必須將其取出,修改然后放回去。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM