Я изучал потоки .Net и узнал о классах Threading.Task
и Threading.Task.Parallel
. Прямо сейчас, используя метод ForEach
класса Parallel
, я обрабатываю каждый объект в отдельном потоке. Однако я полагаю, что метод ForEach
ожидает завершения всех потоков, прежде чем он вернется. Это приводит к тому, что те темы, которые заканчиваются раньше, чем другие, бездействуют. Я хочу, чтобы эти темы работали постоянно. Вот что я надеюсь сделать:
У меня есть поток A
, отвечающий за выделение фрагмента из таблицы и запуск n рабочих потоков для обработки каждой записи.
Каждый раз, когда рабочий поток завершает свою работу, он должен запросить у потока A
следующую запись для обработки.
При выделении записей рабочим потокам, если поток A
заканчивается, он должен вернуться к базе данных и извлечь еще. Я предполагаю, что этот процесс распределения должен быть заключен в блок критической секции.
Может кто-нибудь указать мне учебник, который соответствует моему сценарию?