Нужно преобразовать одну коллекцию в другую с "добавлением" номера элемента.
Сделал так:
int index = 0;
IEnumerable<DestType> destItems = srcItems
//.AsParallel()
.Select(si=> new DestType(si.Name, index++));
Затем нужна параллельная обработка — сделал через .AsParallel().
Корректно ли это решение? Например смущает index++ при параллельной обработке.
Может сделать через Interlocked.Increment(ref index)? Или другой способ
PS. Номер — должен быть уникальным, последовательность необязательна.
Здравствуйте, nikda, Вы писали:
N>Нужно преобразовать одну коллекцию в другую с "добавлением" номера элемента.
Есть перегрузка
.Select((s,i) => ...).
Если производительность является проблемой настолько, что вынуждает использовать AsParallel(), я бы начал с продумывания общей логики и использования более легковесного диспатчинга, Parallel.For() с partitioning, как вариант. Не забываем, что приложение редко живёт в вакууме. Отжираем проц => его не хватает кому-то ещё
Спасибо.
А как узнать действительно ли выполнялась параллельная обработка. Номера в выводе получились последовательными, а в другом варианте (Interlocked.Increment(ref index)) — не последовательные.