2016-07-22 150 views
3

我有幾項任務可以並行進行。由於列表不是線程安全的,我正在使用concurrentbag。一旦完成所有任務,我想將concurrentbag轉換爲列表。如何將concurrentbag轉換爲列表?

我有searched in MSDN,但找不到任何可以將concurrentbag轉換爲c#列表的API。我該怎麼做?

注:我必須轉換爲列表,這是必要的。

我有其他選項來應用列表上的鎖,但我想用於構建線程安全的concurrentbag

+2

有多難讀[MSDN](https://msdn.microsoft.com/en-us/ library/dd381779(v = vs.110).aspx)?它實現IEnumerable <>',使用linq'ToList()'獲取列表。 – Sinatr

+0

@Sinatr在[SO文檔測試版](http://stackoverflow.com/documentation);-)上的示例時間爲 –

+0

您是否使用system.linq添加到您的類中?你必須能夠使用.tolist() –

回答

3

ConcurrentBag具有ToList()方法。

7

您可以使用ToList擴展方法。

var list = concurrentBag.ToList(); 
5

ConcurrentBag.ToList()擴展方法 - 它實現IEnumerable<T>

var someList = someConcurrentBag.ToList(); 
0

如果內部項目隨後非列表中使用

VAR someList = someConcurrentBag.ToList();

或者您可以嘗試如下如果cbag中的每個項目已經是一個列表。

E.g.在我的情況ConcurrentBag <名單< INT>>

ConcurrentBag<List<string>> jobErrorsColl = new ConcurrentBag<List<string>>(); 

// Got something in jobErrorsColl 
List<string> multipleJobErrors = new List<string>(); 
List<string> singleJobErrors = new List<string>(); 

while (jobErrorsColl.IsEmpty) 
{ 
    jobErrorsColl.TryPeek(out singleJobErrors); 
    multipleJobErrors.AddRange(singleJobErrors); 
} 

return multipleJobErrors; 

MSDN鏈接是here爲同一