gpt4 book ai didi

java - RxJava : Subscription's unsubscribe() method isn't invoked

转载 作者:搜寻专家 更新时间:2023-11-01 02:23:10 26 4
gpt4 key购买 nike

在下面的代码中,我需要在取消订阅时释放一些资源(它记录“释放”)。

   Observable first = Observable.create(new Observable.OnSubscribe<Object>() {
@Override
public void call(Subscriber<? super Object> subscriber) {
subscriber.add(Subscriptions.create(() -> {
log(“release”);
}));
}
}).doOnUnsubscribe(() -> log(“first”));
Observable second = Observable.create(…).doOnUnsubscribe(() -> log(“second”));
Observable result = first.mergeWith(second).doOnUnsubscribe(() -> log(“result”));
Subscription subscription = result.subscribe(…);
//…
subscription.unsubscribe();

但它只记录“结果”。看起来取消订阅不会传播到合并的子可观察对象。那么如何在第一个可观察对象的 Observable.OnSubscribe 中处理取消订阅呢?

最佳答案

大多数时候,调用 unsubscribe 只对实时序列有影响,如果某些序列已经完成,则可能不会传播:运算符(operator)可能不会保留他们的源,这样他们就可以避免内存泄漏。主要思想是运营商在调用下游的 onErroronCompleted 方法之前或之后释放他们在终止时管理的任何资源,但这与 1 有点不一致。 x.

如果您想确保资源被释放,请查看 using 运算符,它将在终止或取消订阅时释放您的资源:

Observable.using(
() -> "resource",
r -> Observable.just(r),
r -> System.out.println("Releasing " + r))
.subscribe(System.out::println);

关于java - RxJava : Subscription's unsubscribe() method isn't invoked,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33474282/

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