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)