2013-01-10 32 views
0

我需要能夠以任何順序枚舉集合(foreach)並從任何線程添加/刪除項目。我在這裏使用什麼併發收集?

不需要通過索引進行直接訪問。

我使用什麼系列?只是一個列表?如果是這樣,我只需要鎖定添加/刪除,或者我還必須鎖定foreach嗎?

我希望以下操作可在任何線程上使用。

foreach (var item in myCollection) 
{ 
    // myCollection can be returned in any order. 
} 

myCollection.Add(item) 

var success = myCollection.Remove(item) // returns false if the item does not exist in myCollection 
+1

他意味着元素返回的順序並不重要。 –

+0

你正在使用哪個.NET版本? –

+0

添加了.NET 4.5標記。 – Cheetah

回答

4

您使用前人的精力用於ConcurrentBag線程安全的集合,其中Represents a thread-safe, unordered collection of objects,這是自.NET 4.0

注可供選擇:我不能提供更多的信息,因爲我不知道的情況下,其中你將要使用它。提供更多信息以獲得更深入的答案。

+0

雖然我無法刪除特定的對象嗎? – Cheetah

+0

使用'TryTake' - '嘗試從ConcurrentBag中刪除並返回一個對象。' –

+0

但它可能不是我想要刪除的對象!對不起,我沒有說清楚。查看我對OP的編輯。我想能夠指定我想要刪除的對象。 – Cheetah

相關問題