Is Parallel.ForEach in ConcurrentBag<T> thread safe

Viewed 11402

Description of ConcurrentBag on MSDN is not clear:

Bags are useful for storing objects when ordering doesn't matter, and unlike sets, bags support duplicates. ConcurrentBag is a thread-safe bag implementation, optimized for scenarios where the same thread will be both producing and consuming data stored in the bag.

My question is it thread safe and if this is a good practice to use ConcurrentBag in Parallel.ForEach.

For Instance:

    private List<XYZ> MyMethod(List<MyData> myData)
    {
        var data = new ConcurrentBag<XYZ>();

        Parallel.ForEach(myData, item =>
                        {
                            // Some data manipulation

                            data.Add(new XYZ(/* constructor parameters */);
                        });

        return data.ToList();
    }

This way I don't have to use synchronization locking in Parallel.ForEach using regular List.

Thanks a lot.

2 Answers
Related