rxjava中的油门最新和节流之间有什么区别?

时间:2019-05-27 09:55:52

标签: java rx-java2 reactivex

在“可观察”中,有两种方法称为“节流阀”和“节流阀”。

大理石图相似,但是两个内部代码不同。

public final Observable<T> throttleLast(long intervalDuration, TimeUnit unit) {
    return sample(intervalDuration, unit);
}


public final Observable<T> sample(long period, TimeUnit unit, Scheduler scheduler, boolean emitLast) {
    ObjectHelper.requireNonNull(unit, "unit is null");
    ObjectHelper.requireNonNull(scheduler, "scheduler is null");
    return RxJavaPlugins.onAssembly(new ObservableSampleTimed<T>(this, period, unit, scheduler, emitLast));
}
public final Observable<T> throttleLatest(long timeout, TimeUnit unit, Scheduler scheduler, boolean emitLast) {
    ObjectHelper.requireNonNull(unit, "unit is null");
    ObjectHelper.requireNonNull(scheduler, "scheduler is null");
    return RxJavaPlugins.onAssembly(new ObservableThrottleLatest<T>(this, timeout, unit, scheduler, emitLast));
}

它们之间有什么区别?

2 个答案:

答案 0 :(得分:1)

请参阅@Slaw和@akarnokd的评论。

  

不是肯定的,但油门最后一次可能会在固定的时间间隔上运行,并且每当有物品到达时,油门最新会重置超时。换句话说,固定速率和固定延迟之间的差异。

  

它在javadoc中:油门最新“如果在此超时阶段中没有从上游发出任何项目,则立即发出下一个上游项目,并从此开始超时窗口。”。 ThrottleLast以固定速率发射,如果没有任何物品,则什么也不会发射。

我不太了解,所以我试图比较自己。

sample code

sample

答案 1 :(得分:1)

它们非常相似。 它们都有固定的时间窗口(上面的注释是错误的)。

唯一的区别是第一项的处理方式。

  • ThrottleLast不会立即发出第一项,它将始终等待时间窗口过去,然后从该时间窗口(如果有)发出最后一个值
  • ThrottleLatest将立即发出第一项,此后其行为与ThrottleLast相同。