Rx java 如何正确停止rxjava Flowable?

Rx java 如何正确停止rxjava Flowable?,rx-java,rx-java2,Rx Java,Rx Java2,我有以下代码结构 服务 public Flowable entryFlow() { return Flowable.fromIterable(this::getEntries) } 消费者 void start() { disposable = service .entryFlow() .observeOn(Schedulers.computation()) .subscribeOn(Schedulers.computation(

我有以下代码结构

服务

public Flowable entryFlow()
{
    return Flowable.fromIterable(this::getEntries)
}
消费者

void start()
{
    disposable = service
        .entryFlow()
        .observeOn(Schedulers.computation())
        .subscribeOn(Schedulers.computation())
        .subscribe(
            entry -> ...,
            this::onError,
            this::subscriptionFinished);
}

void stop()
{
    disposable.dispose();
}

private void onError(Throwable e)
{
    subscriptionFinished();
}

private void subscriptionFinished()
{
    //
}
我需要一种方法,在调用stop方法时阻止flowable获取和发送数据

通过执行以下操作,我注意到doOnCancel lambda并不总是被称为

void start()
{
    disposable = service
        .entryFlow()
        .observeOn(Schedulers.computation())
        .subscribeOn(Schedulers.computation())
        .doOnCancel(this::snapshotFinished)
        .subscribe(
            entry -> ...,
            this::onError,
            this::subscriptionFinished);
}

void stop()
{
    disposable.dispose();
}
另一种选择是

volatile stopped;

void start()
{
    disposable = service
        .entryFlow()
        .observeOn(Schedulers.computation())
        .subscribeOn(Schedulers.computation())
        .takeUntil(x -> stopped)
        .subscribe(
            entry -> ...,
            this::onError,
            this::subscriptionFinished);
}

void stop()
{
    stopped = true;
}
启动和停止的建议实施方式是什么,以便flowable停止发射和完成,或者调用类似的方法(doOnCancel action?)

以后编辑

使我的用例更短

是否足以调用disposable.dispose以停止flowable从iterable获取数据并发送到源?我只有1个订户,并且无论什么原因,当流结束时都需要调用onComplete/onError/other回调

我所说的其他回调指的是doOnCancel/doFinally等


谢谢

我建议使用
dispose()
方法。然后只需添加
doOnDispose
即可触发您的副作用代码。

如果此时流程已经完成,则不会调用
doondancel
的唯一原因。为什么您只需要对取消做出反应?你可以考虑<代码> dfimale<代码>对终止和取消做出反应。听起来很有趣,但是从JavaDoc我知道除了完整/ Orror之外,它还会被调用。我真的不需要知道是什么导致流结束(完成、错误、取消),但我希望结束操作只执行一次。在后面的编辑部分中添加了对我的问题的更简洁的描述有更好的方法吗