.Net TPL,Уведомить задачу, когда другие задачи полные
Примечание: Невозможно использовать библиотеку DataFlow; Дополнения не допускаются.
У меня есть четыре задачи, как показано на рисунке ниже:
Task_1 (data_producer) -> читает записи из большого файла (> 500000 записей) и добавляет записи в BlockingCollection
task_2, task_3 (data_consumers) -> Каждая из этих задач берет записи из BlockingCollection. Каждая задача выполняет некоторую работу над записью, взятой из BlockingCollection (связанная с сетью), и по завершении каждая задача может добавить запись в очередь результатов. Порядок обработки НЕ ВАЖНО.
task_4 (процессор результатов) -> Принимает записи из результатов_выхода и записывает в выходной файл.
Я тогда ждать задачи закончить, т.е .:
Task.WhenAll(t1, t2, t3, t4)
Так что у меня одна задача продюсера, несколько задач потребителей, и одна задача для сохранения результатов.
Мой вопрос:
Как оповестить задачу 4, когда задачи 2 и 3 будут завершены, так что задача 4 также знает, когда закончится?
Я нашел много примеров, которые «перемещают» данные из одной задачи в другую линейным «конвейером», но не нашли примеров, иллюстрирующих вышеизложенное; то есть, как уведомить задачу 4, когда задачи 2 и 3 завершены, так что она будет знать, когда нужно закончить.
Моя первоначальная мысль состоит в том, чтобы «зарегистрировать» задачу 2 и 3 с задачей 4 и просто контролировать состояние каждой зарегистрированной задачи - когда задачи 2 и 3 больше не выполняются, тогда задача 4 может остановиться (если очередь результатов также пуст).
Заранее спасибо.
Вы не можете добавить [NuGet пакет для 'TPL Dataflow'] (https://www.nuget.org/packages/Microsoft.Tpl.Dataflow) для вашего проекта? – VMAtm
Исправить - для этого конкретного проекта поток данных TPL не разрешен. – bdcoder