我有一个建模为Completable
的异步操作:
Completable onCancel = onCancel();
我有一个Flowable
:
Flowable<Integer> f = flowable();
我要在处置对flowable的订阅时触发onCancel
操作:
f.subscribe().dispose();
我能想到的唯一方法是像这样从onCancel
内部订阅doOnCancel
:
f.doOnCancel(() -> onCancel.blockingAwait())
这是推荐的方法吗?
答案 0 :(得分:0)
在一个流内部订阅另一个流没有本质上的错误。但是,或者,您可以考虑是否可以将导致取消订阅的事件表示为Observable
,然后订阅该事件。在这种情况下,您不必对取消做出任何反应,而只需直接针对此事件。当然能否做到取决于您的情况。
您的示例中最大的气味是执行blockingAwait()
,这迫使异步任务同步完成-那时使用RxJava没有意义。
您只需订阅Completable
:
doOnCancel(() -> completable.subscribe(
() -> System.out.println("Completed!"),
e -> System.out.println("Completed with error: " + e)
))
甚至不推荐doOnCancel(completable::subscribe)
-不推荐,因为那样您会丢失所有有关完成和错误的信息。