How to Convert Concurrentbag to List?
I Have Few Task Which I Can Do in Parallel. as List Is Not Thread Safe I Am Using Concurrentbag. Once All the Task Are Completed I Want to Convert the...
I have few task which I can do in parallel. As list is not thread safe i am using concurrentbag. Once all the task are completed I want to convert the concurrentbag to list.
I have searched in MSDN but couldn't find any API which can convert concurrentbag to list in c#. How can I do it?
Note: i have to convert to list, It is necessary.
I have other option to apply lock on list but i wanted to use in build concurrentbag which is thread safe.
5 Answers
You could use ToList extension method.
var list = concurrentBag.ToList();
ConcurrentBag has the extension method of .ToList() - it implementsIEnumerable<T>
var someList = someConcurrentBag.ToList();
ConcurrentBag has the ToList() method.
If your internal item are non list then use
var someList = someConcurrentBag.ToList();
Or you can try as below If each item in the cbag is already a list.
E.g. In my case 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 link is here for the same
You can use the following to convert concurrentbag to list:
var list = = someConcurrentBag.SelectMany(r => r).ToList();