Rx java 关机多播可观测

Rx java 关机多播可观测,rx-java,rx-java2,Rx Java,Rx Java2,我创建了一个Observable,它是published,并被许多观察者订阅 我想任意关闭它。我知道如果我做了refCount,它将自动关闭,此时所有观察者都将取消订阅,但我想手动关闭,无需存储和检查所有一次性物品您可以在返回的一次性上调用dispose,但请注意,这可能会使观察者处于活动状态,因为他们不会收到任何进一步的事件。不管怎样,你也得把它们处理掉 ConnectableObservable co=source.publish(); 一次性d=公司连接(); 一次性d1=公司订阅();

我创建了一个Observable,它是
publish
ed,并被许多观察者订阅


我想任意关闭它。我知道如果我做了
refCount
,它将自动关闭,此时所有观察者都将取消订阅,但我想手动关闭,无需存储和检查所有一次性物品

您可以在返回的
一次性
上调用
dispose
,但请注意,这可能会使观察者处于活动状态,因为他们不会收到任何进一步的事件。不管怎样,你也得把它们处理掉

ConnectableObservable co=source.publish();
一次性d=公司连接();
一次性d1=公司订阅();
一次性d2=公司订阅();
d、 处置();
d1.处置();
d2.处置();
如果您想避开悬挂部分,请在主题上使用
takeUntil

PublishSubject terminate = PublishSubject.create();

ConnectableObservable co = source.publish();
Disposable d = co.connect();

terminate.doOnComplete(d::dispose).subscribe();

Observable observable = co.takeUntil(terminate);

observable .subscribe(System.out::println, Throwable::printStackTrace,
    () -> System.out.println("Done 1"));
observable .subscribe(System.out::println, Throwable::printStackTrace,
    () -> System.out.println("Done 2"));

terminate.onComplete();

我被第二个例子弄糊涂了。onComplete将同时触发
d
的dispose方法和TakeTill的边界?这不是两次关闭源观察者吗?或者TakeTill是否负责观察者?否。TakeTill处理对可连接源的订阅,但不会自行断开连接。即,如果第一个示例中有d1.dispose和d2.dispose。必须显式断开可连接设备的连接。为了更清楚,您可以使用source.takeUntil.publish,以便终止发生在共享序列之上。