等待多个RxJava observable完成

时间:2018-04-26 04:11:51

标签: java web-services asynchronous rx-java

我在Web服务中使用RxJava来创建多个observable,每个observable都在onNext和onError函数中执行某些操作。我想等到所有这些observable完成其工作之后才返回客户端的响应,但我也希望这些任务并行执行

我使用以下方法合并了所有这些:

Observable<List<Obj>> mergedObs = Observable.mergeDelayError(tasks)

然后我通过

将其转换为阻塞的observable
mergedObs.toList().toBlocking.subscribe(...)

但是,我注意到,当合并的observable等待所有任务调用subscribe()时,它等待subscribe函数中的任务完成。这里有一些示例代码,省略了不重要的细节:

public void doWork() {
    Observable<Obj> mergedTasks = getTasks();
    mergedTasks.toList().toBlocking().subscribe(
        results -> LOG.info("Done!)
    );

    return; // eventually returns a web response
}

private Observable<Obj> getTasks() {
    List<Observable<Obj>> tasks = new ArrayList<>();
    Observable<Obj> task1 = getTask1();
    Observable<Obj> task2 = getTask2();
    tasks.add(task1);
    tasks.add(task2);

    // Both tasks execute in parallel
    tasks.toList().subscribe(
        result -> processSearch(), // this can execute after the service returns a response!
        exception -> handleException() // this can execute after the service returns a response!
    );

    return Observable.mergeDelayError(tasks);
}

private Observable<Obj> getTask1() {
    // implementation detail
}

private Observable<Obj> getTask2() {
    // implementation detail
}

虽然此代码 等待两个任务调用subscribe(),但它不会等待onSuccess或onError中执行的工作。

0 个答案:

没有答案