projectReactor文档说Mono::flatMap
是异步的,如下所示。
所以,我可以写我所有的方法来返回这样的Mono出版商。
public Mono<String> myMethod(String name) {
return Mono.just("hello " + name);
}
并与Mono::flatMap
一起使用,如下所示:
Mono.just("name").flatMap(this::myMethod);
这是否使我的方法的执行是异步的?这会使我的代码比使用Mono::map更好、更快吗?对我所有的方法来说,这样做的开销是否太高了?
公共决赛Mono flatMap(Function<?超级T?扩展Mono<?扩展R>>变压器)
异步转换此Mono发出的项,返回由另一个Mono发出的值(可能更改值类型)。
发布于 2020-07-29 15:29:25
是否使我的方法的执行是异步的?
让我们来看一下Asynchronous
的定义:
异步编程是一种并行编程方法,其中一个工作单元独立于主应用程序线程运行,并将其完成、失败或进展通知调用线程。
在这里,您的工作单元是在同一个线程中进行的,除非您使用一个subscribeOn
来执行Scheduler
。所以这不是异步。
是否使我的代码比仅仅使用Mono::map更有反应性、更好、更快?
不行。由于在本例中,publisher Mono.just("hello " + name)
立即通知订阅服务器我已经完成了任务,因此正在处理的线程立即从事件循环中获取该事件并开始处理响应。
相反,这可能在内部导致比简单转换元素的map
更多的操作。
因此,理想情况下,当您有I/O操作(如DB调用)或网络调用( Network )时,您应该使用一个flatMap
,如果所有线程都很忙,这可能需要一些时间来执行其他任务。
https://stackoverflow.com/questions/63163616
复制相似问题