微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

之间有什么区别:
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);
            }
        })

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

解决方法

根据您的source observable(在这种情况下只是(“MyString”)),可能会有一些差异:

> interval()将每秒运行一次(如果可能),而repeatWhen()将始终延迟()1秒.对于just()这没关系,但是如果你的源需要一段时间来运行(例如500ms)那么你会看到时间上的差异:interval()将重新订阅每1,000ms,但repeatWhen(delay())将运行每1,500ms(500ms输出1,000ms延迟).

如果你的源需要超过一秒钟,那么每个resubscription与interval()之间不会有暂停,因为它只会等到前一个flatMap()完成后再执行另一个
>如果在flatMap()中使用调度程序,则可以实现repeatWhen()无法实现的某些并行化.同样,这对于just()来说并不重要,但它适用于长期运行的Observable.有关更多信息,请查看this great article.

我不相信这两者之间存在差异,更熟悉RxJava内部的人可能会指出更多.

原文地址:https://www.jb51.cc/java/126845.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐