我想使用RxJava创建工作队列:我有一个线程正在做一些工作,我想保证在我们完成/失败当前工作之前不会执行任何其他工作。
我的解决方案就是阻止observable并等待结果:
blocking
您可能认为没有必要使用RxJava,因为所有内容都是同步的。对于这种特殊方法,情况确实如此,但是:
我知道divs
通常被认为是一种反模式,所以我可以做得更好吗?
答案 0 :(得分:2)
您可以使用concat
在某个线程上按顺序执行工作:
fun foo(): Observable<Foo> {
return performSomeJob(whatever)
.concatMap { performAnotherJob(whatever) }
.concatMap { performLastJob(whatever) }
.subscribeOn(Schedulers.newThread())
}
答案 1 :(得分:2)
您可以在一个单线程Scheduler
上安排所有工作,例如
@NonNull public static Scheduler single()返回一个默认的,共享的,单线程支持的Scheduler实例,用于需要在同一后台线程上执行强序执行的工作。
fun foo(): Observable<Foo> =
Observable.fromCallable { object.performSomeJob(whatever) }
.subscribeOn(Schedulers.single())
.observeOn(Schedulers.single())
.flatMap { object.performAnotherJob(whatever) }
.flatMap { object.performLastJob(whatever) }