关闭多播可观察

时间:2019-06-13 15:55:06

标签: rx-java rx-java2

我创建了一个publish的Observable,并被许多观察者订阅。

我想任意关闭它。我知道如果我执行refCount,它将在所有观察员都退订时自动关闭,但是我想手动关闭,而不存储并遍历所有一次性用品

1 个答案:

答案 0 :(得分:1)

您可以在connect返回的dispose上调用Disposable,但是请注意,这可能会使观察者处于活动状态,因为他们将不会再收到任何事件。无论如何,您也必须处置它们。

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

Disposable d1 = co.subscribe();
Disposable d2 = co.subscribe();

d.dispose();

d1.dispose();
d2.dispose();

如果要避免悬挂部分,请对主题使用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();