gpt4 book ai didi

rx-java - interval() 和 repeatWhen() 之间的区别,用于从 Observable 中按间隔轮询

转载 作者:行者123 更新时间:2023-12-04 10:24:09 31 4
gpt4 key购买 nike

之间有什么区别:

Observable<String> observable = Observable
.interval(0, 1, TimeUnit.SECONDS)
.flatMap(new Func1<Long, Observable<String>>() {
@Override
public Observable<String> call(Long aLong) {
return Observable.just("MyString");
}
})

和:
Observable<String> observable = Observable.just("MyString")
.repeatWhen(new Func1<Observable<? extends Void>, Observable<?>>() {
@Override
public Observable<?> call(Observable<? extends Void> completed) {
return completed.delay(1, TimeUnit.SECONDS);
}
})

第二种更简洁,但实际上并考虑到背压,这两种解决方案的行为方式是否相同?

最佳答案

根据您的可观察源(在本例中为 just("MyString") ),可能存在一些差异:

  • interval()将每秒运行一次(如果可能),而 repeatWhen()将永远delay()按 1 秒。对于 just()这无关紧要,但如果您的源需要一段时间才能运行(例如 500 毫秒),那么您将看到时间上的差异:interval()将每 1,000 毫秒重新订阅一次,但 repeatWhen(delay())将每 1,500 毫秒运行一次(500 毫秒输出 + 1,000 毫秒延迟)。

    如果您的源花费的时间超过一秒,那么每次使用 interval() 重新订阅之间将不会暂停。 ,因为它只会等到上一个 flatMap()在执行另一个之前完成!
  • 如果您使用 SchedulerflatMap()那么你可以实现一些用 repeatWhen() 不可能实现的并行化.同样,这对于 just() 来说并不重要。 ,但它会长期运行 Observable .有关更多信息,请查看 this great article .

  • 我不确定这些是两者之间的所有差异,更熟悉 RxJava 内部结构的人可能会指出更多。

    关于rx-java - interval() 和 repeatWhen() 之间的区别,用于从 Observable 中按间隔轮询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35770811/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com