Допустим, у меня есть данные, поступающие из двух разных источников на двух разных частотах, и я должен объединить их и обработать вместе. Частота на канале A составляет 100 Гц (100 целых чисел в секунду), а частота на канале B - 1 Гц (1 целое число в секунду). Данные уже обрабатываются на каждом отдельном канале с помощью ActionBlock из потока данных TPL. Однако теперь мне нужно обработать его вместе (1000 int из A и 5 int из B за раз). Для меня решением было бы объединить эти блоки с помощью BatchJoinBlock, который будет ждать 1000 сообщений из канала A (1000 целых чисел) и 5 сообщений из канала B (5 целых чисел). После того, как пакеты заполнены, активируйте их в блоке действий и обработайте.
Проблема - согласно документации, BatchJoinBlock (MSDN) всегда будет иметь все пакеты одинакового размера.
Как я мог выбрать разные размеры?
В качестве альтернативы я, вероятно, мог бы создать 2 разных объекта BatchBlock с разными размерами, а затем запустить их в JoinBlock, который, в свою очередь, отправил бы данные в ActionBlock; но это кажется излишним, или это обычный подход?
Я не публикую никакого кода, потому что сейчас я рассматриваю чисто теоретические подходы, прежде чем я перейду к реализации этого соединения двух разных каналов. Тем не менее, я могу быстро придумать какой-нибудь пример, если понадобится.