如何将concurrentbag转换成列表?

问题描述 投票:4回答:5

我几乎无法完成任务。由于列表不是线程安全的我使用concurrentbag。完成所有任务后,我想将concurrentbag转换为列表。

我有searched in MSDN但找不到任何可以将concurrentbag转换为c#列表的API。我该怎么做?

注意:我必须转换为列表,这是必要的。

我有其他选择在列表上应用锁,但我想在构建concurrentbag中使用,这是线程安全的。

c# .net
5个回答
8
投票

你可以使用ToList扩展方法。

var list = concurrentBag.ToList();

5
投票

ConcurrentBag.ToList()的扩展方法 - 它实现了IEnumerable<T>

var someList = someConcurrentBag.ToList();

3
投票

ConcurrentBag具有ToList()方法。


0
投票

如果您的内部项目不是列表,则使用

var someList = someConcurrentBag.ToList();

或者您可以尝试如下如果手提包中的每个项目已经是一个列表。

例如。在我的情况下ConcurrentBag<List<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相同


-1
投票

您可以使用以下命令将concurrentbag转换为list:

var list = = someConcurrentBag.SelectMany(r => r).ToList();
© www.soinside.com 2019 - 2024. All rights reserved.