RxSwift Disposable 属性 isDisposed always false or Disposable closure newer called to cancel worker task
RxSwift Disposable property isDisposed always false or Disposable closure newer called to cancel worker task
我的 observable 中需要一些辅助任务,当我的 observable 没有任何订阅时我想取消这些任务。但即使我的可观察对象没有订阅,甚至我得到了 onDisposed 事件。我的 observable 中的工作任务继续执行,但它不能执行,因为它取决于我一次性的 isDisposed 属性,但它始终为 false。
这是我的代码:
Observable<Void>.create { observer -> Disposable in
let disposable = BooleanDisposable(isDisposed: false)
Thread(block: {
while (!disposable.isDisposed) {
print("Next")
observer.onNext(())
sleep(1)
}
observer.onCompleted()
print("Done")
}).start()
return disposable
}.subscribe(onNext: { _ in
print("onNext")
}, onCompleted: {
print("onCompleted")
}) {
print("onDisposed")
}.disposed(by: self.disposeBag)
并输出:
Next
onNext
Next
onNext
Next
onNext
Next
onNext
Next
onNext
Next
onNext
Next
onNext
onDisposed
Completed
Next
Next
Next
... and so on
虽然我期待这样的事情:
Next
onNext
Next
onNext
Next
onNext
Next
onNext
Next
onNext
onDisposed
Completed
Done
我哪里做错了,或者我只是没有正确理解 Disposables 和 Observables?
我正在使用 RxSwift 4.5.0。
提前致谢。
您的默认 false
不正确。应该是true
。但是如果你不让一次性弱化那么你就不需要默认。
Observable<Void>.create { observer -> Disposable in
let disposable = BooleanDisposable(isDisposed: false)
Thread(block: { [disposable] in
while (!disposable.isDisposed) {
observer.onNext(())
sleep(1)
}
})
.start()
return disposable
}
.debug("here")
.take(5)
.subscribe()
.disposed(by: disposeBag)
我的 observable 中需要一些辅助任务,当我的 observable 没有任何订阅时我想取消这些任务。但即使我的可观察对象没有订阅,甚至我得到了 onDisposed 事件。我的 observable 中的工作任务继续执行,但它不能执行,因为它取决于我一次性的 isDisposed 属性,但它始终为 false。
这是我的代码:
Observable<Void>.create { observer -> Disposable in
let disposable = BooleanDisposable(isDisposed: false)
Thread(block: {
while (!disposable.isDisposed) {
print("Next")
observer.onNext(())
sleep(1)
}
observer.onCompleted()
print("Done")
}).start()
return disposable
}.subscribe(onNext: { _ in
print("onNext")
}, onCompleted: {
print("onCompleted")
}) {
print("onDisposed")
}.disposed(by: self.disposeBag)
并输出:
Next
onNext
Next
onNext
Next
onNext
Next
onNext
Next
onNext
Next
onNext
Next
onNext
onDisposed
Completed
Next
Next
Next
... and so on
虽然我期待这样的事情:
Next
onNext
Next
onNext
Next
onNext
Next
onNext
Next
onNext
onDisposed
Completed
Done
我哪里做错了,或者我只是没有正确理解 Disposables 和 Observables?
我正在使用 RxSwift 4.5.0。
提前致谢。
您的默认 false
不正确。应该是true
。但是如果你不让一次性弱化那么你就不需要默认。
Observable<Void>.create { observer -> Disposable in
let disposable = BooleanDisposable(isDisposed: false)
Thread(block: { [disposable] in
while (!disposable.isDisposed) {
observer.onNext(())
sleep(1)
}
})
.start()
return disposable
}
.debug("here")
.take(5)
.subscribe()
.disposed(by: disposeBag)