【发布时间】:2015-09-07 19:37:47
【问题描述】:
我想创建一个接受S 并返回一个Observable<T> 的方法,该方法在三个(异步)任务完成后以一个值完成。
这三个任务都在队列上运行,它们自己的消费者在不同的线程中。
这就是我的想法:
- 任务 1 通过队列接收
<S, Subject<T>>并计算来自S的值并使用onNext设置在Subject<T>中,然后调用onComplete()。 - 任务 2 和 3 收到
<S, Subject<Void>>并在完成工作后致电onComplete()。
任务 1、2 和 3 可以独立运行,并以随机顺序完成。
现在我有三个主题,一个T,两个Void。我想返回第一个,但只有在 all 任务完成后才让它发出值T。这是因为在所有任务完成之前,我不希望任何 observable 的订阅者对 T 做任何事情。
结合主题以实现此行为的正确方法是什么?我可以使用CountDownLatch 等轻松破解这个问题,但希望有一种 rx-native 的方式来解决这个问题。
我计划通过队列使用主题作为回调是正确的方法吗?我曾经为此使用CompletableFuture<T>,但我想迁移到RX。
【问题讨论】:
-
作为一个快速的经验法则 - 如果您在设计中使用主题,您可能做错了什么。如果可能,您应该始终避免主题。