У меня есть архитектура, которая считывает пакеты из пакетного двоичного файла, назначает каждый пакет отдельному конвейеру обработки на основе типа пакета и повторно собирает пакеты в новый файл на другой стороне конвейеров. Каждый конвейер содержит очереди блокировки, подобные этому.
На каждой стороне очереди блокировки в каждом трубопроводе имеется поток, который выполняет цикл, который ставит в очередь или удаляет пакеты из очереди. Эти потоки запускаются асинхронно (т. Е. Стиль «запускай и забывай») из объекта контроллера. Этот объект контроллера имеет коллекцию Dictionary<int, ChannelPipeline>
, которая содержит все объекты конвейера.
Вот мой вопрос: Какой механизм я могу установить, который сообщит мне, когда все конвейеры завершат обработку? В каждом конвейере есть свойство EndOfData
; мне нужно постоянно опрашивать это свойство в каждом конвейере, пока все они не прочитают true
, или есть лучший (то есть более эффективный) способ?