Записи в список действительно не безопасны для многопоточных записей.Вам нужно либо использовать lock
для синхронизации доступа, либо использовать коллекцию типа ConcurrentQueue
, которая предназначена для многопоточного доступа.
Пример блокировки (при условии, что list
является локальным для метода)
List<SomeType> list = new List<SomeType>();
settings.AsParallel().ForAll(setting => {
lock (list) {
list.AddRange(GetSomeArrayofSomeType(setting));
}
});
Или еще лучше использовать SelectMany
вместо ForEach
var list = settings
.AsParallel()
.SelectMany(setting => GetSomeArrayOfSomeType(setting))
.ToList();