在java中:
Mono<response> response = mon.just()
Mono<object> object = mono.just()
return response.block()
响应和对象不相互依赖。 有没有办法同时运行2个单声道?
答案 0 :(得分:1)
有多种方式。一个简单的解决方案是使用subscribeOn
运算符:
Mono<response> response = Mono.just(...).subscribeOn(Schedulers.elastic());
Mono<object> object = Mono.just(...).subscribeOn(Schedulers.elastic());
每当有人订阅你的Monos时,它都会发生在另一个线程中。在这种情况下,线程从现有池中获取。 Schedulers
提供了多种方法,允许您使用现有线程或创建新线程(请参阅documentation)。
如果您对反应流和多线程感兴趣,我最近写了一篇关于它的article 。
答案 1 :(得分:0)
如果这两个Mono
以任何方式彼此无关,并且您想要并行运行它们,那么我建议您考虑一下您的设计。
如果您想并行运行它们并在两个结果都可用时使用它们的结果:
Mono<Integer> source1 = Mono.just(1).subscribeOn(Schedulers.elastic());
Mono<String> source2 = Mono.just("aaaa").subscribeOn(Schedulers.elastic());
Mono.zip(source1, source2, (integer, string) -> string.concat(integer.toString()))
.subscribe(x -> System.out.println(x));
输出:
"aaaa1"
如果结果类型相同(但没有重新获得),那么你可以这样做:
Mono<Integer> source1 = Mono.just(1).subscribeOn(Schedulers.elastic());
Mono<Integer> source2 = Mono.just(2).subscribeOn(Schedulers.elastic());
Flux.merge(source1, source2)
.map(number -> number * 10)
.subscribe(x -> System.out.println(x));
请注意,您不能指望哪个元素可用,因此我们使用Flux
来表示2个结果,而在第一个示例中,我们使用Mono
来表示一个包含2个结果的结果
输出:
10
20
or
20
10