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
中执行阻止工作。