代码之家  ›  专栏  ›  技术社区  ›  Ray Zhang

异步Java:帮助平坦嵌套的Mono

  •  0
  • Ray Zhang  · 技术社区  · 7 年前

    设置:

    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()

    0 回复  |  直到 7 年前
        1
  •  2
  •   Phil Clay    7 年前

    替换 Mono.fromSupplier Mono.defer

    另外,如果 doSyncJob* 块,则它们将阻止订户线程。因此,您可能需要使用 .subscribeOn(Schedulers.elastic()) 之后 .defer(...) 以确保阻塞工作在 Scheduler