取消 运行 Completable (RX2) 的最佳方法是什么?

What is the best way to cancel running Completable (RX2)?

取消从 UI 到 RX2 Completable 的长 运行ning 操作的最佳方法是什么?

我有以下代码:

Completable completable = Completable.create(new CompletableOnSubscribe() {
        @Override
        public void subscribe(@NonNull CompletableEmitter e) throws Exception {
        final LongTaskManager ltm = new LongTaskManager();
        ltm.doLongTask();
        e.onComplete();
    }
}.subscribeOn(Schedulers.computation());

Disposable disposable = completable.observeOn(AndroidSchedulers.mainThread())
        .subscribeWith(new DisposableCompletableObserver() {
            @Override
            public void onComplete() {
                //...
            }

            @Override
            public void onError(@NonNull Throwable e) {
                //...
            }
        });   

离开时 UI

disposable.dispose() 

被调用。

在 dispose() 之后,我不会在 Observer 中接收事件 (onComplete/onError),但是长时间的 运行ning 任务将继续 运行。

似乎应该将 "isInterrupted" 标志添加到 LongTaskManager(如 java.lang.Thread 中),它应该在离开 UI 时设置并在 LongTaskManager#doLongTask() 中处理。

但我不确定在使用 Rx 时这是正确的方法,并想澄清这方面。

Observable/Completable 将向您正在执行订阅的线程发送线程中断信号,因此停止操作取决于 doLongTask() 究竟做了什么,以及是否确实如此它在订阅线程上或将工作分叉到其他线程。

此外,如果您的操作可以是 cancelled/stopped,您可以而且应该提供 Cancellation/Disposable 逻辑,这可以使用 Emitter.setCancellable()/setDisposable() 来完成,请参阅其他信息.