合并优先

时间:2018-04-30 14:26:58

标签: rx-java2

我使用Flowable.merge运算符,每个缓冲区大小为1,来自两个上游。

Flowable.merge(sources, 2, 1)
.observeOn(Schedulers.io(), false, 1)

当从下游调用request(1)时,是否可以使用来自流的优先级? 当两个流都有队列中的项目(完整)而不是第一个源的应该发出的项目(请求(1)的调用)。

来源可以是两个科目。

1 个答案:

答案 0 :(得分:0)

您需要创建一个实现优先级处理的专用observable。

运营商将构建两个订户并将它们订阅到两个观察链。然后,每个订户将处理流的合并。 "优先级"订阅者将收到一个值,检查下游是否已请求值并将其发送。 "优先级二"订户将收到一个值,如果有一个优先级,则保留该值。等待发送的价值。每当订户向下游发出值时,每个订户都会发出request(1)

幸运的是,RxJava是开源的,更幸运的是,有几个博客描述了RxJava运营商的正确实现。 David Karnok的这个blog有很多关于实现许多运算符的书面描述。他的帖子非常详细地描述了如何避免线程数据结构访问的许多缺陷。