У меня есть параллельная коллекция, содержащая 100 тыс. элементов. Обработка каждого элемента в коллекции может занять от 100 мс до 10 секунд. Я хочу ускорить процесс, распараллелив обработку, и чтобы 100 миньонов выполняли работу одновременно. Я также должен сообщать пользовательскому интерфейсу некоторые конкретные данные по мере выполнения этой обработки, а не просто процент выполнения.
Я хочу, чтобы параллельные подзадачи грызли параллельную коллекцию, как стая пескарей, атакующих кусок хлеба, брошенный в пруд. Как предоставить параллельную коллекцию параллельным задачам? Могу ли я иметь обычный цикл и просто запустить асинхронную задачу внутри цикла и передать ее IProgress? Нужна ли мне для этого параллельная коллекция?
Мне было рекомендовано использовать Parallel.ForEach, но я не понимаю, как каждый подпроцесс, установленный степенями параллелизма, может сообщать о пользовательском объекте обратно в пользовательский интерфейс с каждым элементом, который он обрабатывает. , а не только после того, как он закончит обработку своей доли из 100 000 элементов.