Описание ConcurrentBag на MSDN неясно:
Пакеты полезны для хранения объектов, когда порядок не имеет значения, и в отличие от наборов, пакеты поддерживают дубликаты.ConcurrentBag - это потокобезопасная реализация пакета, оптимизированная для сценариев, в которых один и тот же поток будет производить и потреблять данные, хранящиеся в пакете.
У меня вопрос, является ли он безопасным для потоков, и если это хорошая практикаиспользовать ConcurrentBag в Parallel.ForEach.
Для экземпляра:
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();
}
Таким образом, мне не нужно использовать синхронизацию синхронизации в Parallel.ForEach с использованием обычного List.
Большое спасибо.