Вы не можете отключить поведение throttleLast
.Самое близкое, что вы можете сделать, это опубликовать последовательность и переключиться между двумя режимами обработки:
source
.observeOn(Schedulers.single())
.publish(o ->
o.throttleLast(500, TimeUnit.MILLISECONDS, Schedulers.single())
.take(1)
.concatWith(o.takeUntil(1, TimeUnit.SECONDS, Schedulers.single()))
.repeat()
.takeUntil(o.ignoreElements().toObservable())
)
Таким образом, дросселируйте в течение 500 миллисекунд, что должно привести к одному элементу, затем переключитесь на нерегулируемую последовательность на 1 секунду, затемповторите с начала с дросселированием и т. д. Чтобы избежать потери данных из-за переключения режима, вы должны использовать однопоточный планировщик, такой как single()
, но он все еще не свободен от потери данных на 100%.Лучшим является выделенный уникальный оператор.
Редактировать: Существует необходимость в дополнительном takeUntil
для остановки повтора, если источник прекратил работу самостоятельно.