在“可观察”中,有两种方法称为“节流阀”和“节流阀”。
大理石图相似,但是两个内部代码不同。
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));
}
它们之间有什么区别?
答案 0 :(得分:1)
请参阅@Slaw和@akarnokd的评论。
不是肯定的,但油门最后一次可能会在固定的时间间隔上运行,并且每当有物品到达时,油门最新会重置超时。换句话说,固定速率和固定延迟之间的差异。
和
它在javadoc中:油门最新“如果在此超时阶段中没有从上游发出任何项目,则立即发出下一个上游项目,并从此开始超时窗口。”。 ThrottleLast以固定速率发射,如果没有任何物品,则什么也不会发射。
我不太了解,所以我试图比较自己。
答案 1 :(得分:1)
它们非常相似。 它们都有固定的时间窗口(上面的注释是错误的)。
唯一的区别是第一项的处理方式。
ThrottleLast
不会立即发出第一项,它将始终等待时间窗口过去,然后从该时间窗口(如果有)发出最后一个值ThrottleLatest
将立即发出第一项,此后其行为与ThrottleLast相同。