gpt4 book ai didi

java - RxJava 在网络关闭时取消订阅

转载 作者:行者123 更新时间:2023-11-30 05:33:55 28 4
gpt4 key购买 nike

如果网络请求关闭,我当前正在尝试取消订阅可观察对象,以便不再进一步传输数据。

我的 Observable 是通过以下方式创建的:

Observable.interval(1, TimeUnit.SECONDS)
.map { LocalDateTime.now() }.share()

所以有多个订阅者。但我不知道如果网络关闭如何取消订阅。

我目前正在将带有 vert.x 的服务器发送事件的数据传输到客户端,如下所示:

flow.subscribe({
response.write("the current time is $it")
}, ::println, {
response.end()
})

如果我取消客户端的请求,可观察对象将继续“流式传输”数据。

感谢您的帮助

最佳答案

您可以通过调用dispose()来取消订阅订阅者

Disposable disposable = flow.subscribe({
response.write("the current time is $it")
}, ::println, {
response.end()
})

disposable.dispose();

更新:自定义可观察

val observable: Observable<LocalDateTime> = Observable.create { emitter ->
val timer = Timer()
timer.schedule(timerTask {
if (emitter.isDisposed) {//<-- cancel emmitting items if disposed
timer.cancel()
} else {
emitter.onNext(LocalDateTime.now())
}
}, 0, 1000)

}
disposable = observable.share().subscribe { t ->
System.out.println(" Hello World! $t");
disposable?.dispose()//<-- here calling dispose() causes observable to stop emitting items
}

关于java - RxJava 在网络关闭时取消订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57006536/

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