gpt4 book ai didi

rx-java - share() 和 publish().autoConnect() 有什么区别?

转载 作者:行者123 更新时间:2023-12-01 07:35:29 25 4
gpt4 key购买 nike

根据我的观点,我认为 share()publish().autoConnect() 是一样的。但是在这段代码中,结果是不一样的

Observable<Integer> cold = Observable.create(subscriber -> {
for (int i = 0; i <= 2; i++) {
System.out.println("Hot Observable Emit " + i);
subscriber.onNext(i);
}
});

ConnectableObservable<Integer> connectble = cold.publish().autoConnect(2);
//Obserable(Integer) connectavle = cold.share();
connectble.subscribe(subscriber1);
connectble.subscribe(subscriber2);
publish(). autoConnect() output
Hot Observable Emit 0
Subscriber 1 : 0
Subscriber 2 : 0
....
share() output
Hot Observable Emit 0
Subscriber 1 : 0
//the subscriber2 not receive event

在这种情况下,我们不能在 rx-java 中使用 share() 进行多播?我找到了 conclusion 但不适合这种情况。

测试环境: oracle jdk1.8 rx-java 1.2 IDEA ubuntu

最佳答案

它们的不同之处在于,当订阅​​者从 share 退订时,上游断开连接,当新订阅者订阅时,上游源重新订阅并从头开始(如果冷)。
autoConnect等待指定数量的订阅者,连接一次,并且在所有订阅者取消订阅时永远不会断开连接。这是一个 description关于它是如何工作的。

关于rx-java - share() 和 publish().autoConnect() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40466844/

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