Is Parallel.ForEach no ConcurrentBag <T> thread safe

A descrição do ConcurrentBag no MSDN não está clara:

s @Bags são úteis para armazenar objetos quando o pedido não importa e, diferentemente dos conjuntos, os sacos suportam duplicatas. ConcurrentBag é uma implementação de bolsa segura para threads, otimizada para cenários em que a mesma thread estará produzindo e consumindo dados armazenados na bols

Minha pergunta é thread thread safe e se essa é uma boa prática usar ConcurrentBag em Parallel.ForEac

Por exemplo

    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();
    }

Desta forma, não preciso usar o bloqueio de sincronização no Parallel.ForEach usando a lista comu

Muito obrigado

questionAnswers(2)

yourAnswerToTheQuestion