异步Java:帮助扁平化我的嵌套Mono



Setup:

public Mono<Mono<String>> getAsyncResult() { // should return Mono<String>
    return Mono.fromSupplier(() -> {
        if (stopEarly()) return Mono.just("STOPPED EARLY");
        int a = doSyncJob1();
        int b = doSyncJob2();
        return doAsyncJob(a, b).map(string1 -> toString2(string1));
    });
}

现在整个事情都Mono<Mono<String>>了.如何让它在不阻塞的情况下返回Mono<String>

它全部位于Mono.fromSupplier()内部的原因是因为我不需要任务必须阻止并立即发生,它们可以安排为异步运行。也许一种方法是扁平化Mono.fromSupplier()里面的东西,但我不确定如何组成它。

Mono.fromSupplier替换为Mono.defer

此外,如果doSyncJob*阻止,那么它们将阻止订阅者线程。 因此,您可能希望在.defer(...)后使用.subscribeOn(Schedulers.elastic()),以确保在用于阻止工作的Scheduler中执行阻止工作。

最新更新