我有几个任务可以并行执行。由于列表不是线程安全的,所以我正在使用concurrentbag
。完成所有任务后,我想将concurrentbag
转换为列表。
我在MSDN中搜索过,但无法找到任何可在C#中将concurrentbag转换为list的API。我该怎么做?
注意: 我必须转换为list,这是必要的。
我还可以在列表上应用锁定,但我想使用内置的concurrentbag
,因为它是线程安全的。
ToList
扩展方法。var list = concurrentBag.ToList();
ConcurrentBag
有一个扩展方法.ToList()
- 它实现了IEnumerable<T>
var someList = someConcurrentBag.ToList();
ConcurrentBag有ToList()方法。
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链接(点击此处),与此相关的是it技术。
var list = = someConcurrentBag.SelectMany(r => r).ToList();
IEnumerable<>
,使用 LINQ 的ToList()
方法可以获取列表。 - Sinatr