是否可以在一段时间内禁用 throttleLast?

Is it possible to disable throttleLast for period of time?

我的事件来自系统的快速时间,但我只需要每 500 毫秒最后一次,所以我使用 tthrottle 。但是,在用户输入后,我想禁用 1 个事件的节流以使其尽快进行。有没有办法禁用它或指示应该强制执行下一个事件?

observable = observable.throttleLast(500, TimeUnit.MILLISECONDS);
observable = observable.observeOn(AndroidSchedulers.mainThread());
observable = observable.subscribeOn(Schedulers.io());
observable.subscribe(...)

您无法关闭 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% 无数据丢失。最好是专门的unique operator。

编辑: 如果源自行终止,则需要额外的 takeUntil 来停止重复。