使用RxJava的工作队列

时间:2017-08-20 16:38:09

标签: android multithreading rx-java rx-android

我想使用RxJava创建工作队列:我有一个线程正在做一些工作,我想保证在我们完成/失败当前工作之前不会执行任何其他工作。

我的解决方案就是阻止observable并等待结果:

blocking

您可能认为没有必要使用RxJava,因为所有内容都是同步的。对于这种特殊方法,情况确实如此,但是:

  1. 我想避免'回调地狱':有三种方法,每种都采用回调,我使用RxJava来链接它们
  2. 我在调用方法中进一步使用Rx。
  3. 我知道divs通常被认为是一种反模式,所以我可以做得更好吗?

2 个答案:

答案 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) }