Допустим, у нас есть график, который выглядит следующим образом:
broadcast ~> flowA ~> fanIn
source ~> broadcast ~> flowB ~> fanIn ~> sink
broadcast ~> flowC ~> fanIn
Потоки flowA
, flowB
, flowC
все выполняют преобразование для входящих элементов.fanIn
выполняет некоторое объединяющее действие с результатами всех трех потоков.
Проблема заключается в том, что потоки A
/ B
/ C
не излучают элементы с одинаковой скоростью.Для некоторых элементов источника flowA
нечего излучать, в то время как flowB
и C
продолжают излучать.
Теперь, на fanIn
Я хочу быть уверен, что полученные элементы на всех трехпорты «принадлежат» одному и тому же элементу, исходящему из источника, то есть они являются результатом преобразований одного и того же элемента.
Как можно это сделать?
Мое текущее решение состоит в том, чтобыимеют потоки A
/ B
/ C
испускают Option
с.Каждый поток генерирует Some
, если он может выполнить преобразование, и None
, если он не может.Таким образом, количество испускаемых элементов и скорость во всех трех потоках остаются неизменными, и я могу гарантировать, что полученные элементы принадлежат одному и тому же элементу источника.Я ищу более эффективное решение, которое, по возможности, не требует ненужного создания и переноса объектов.