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 <?super T,?extended Mono <?extended R >>转换器)
异步转换此Mono发出的项目,返回另一个Mono发出的值(可能会更改值类型)。
这会使我的方法执行异步吗?
让我们来看一下它的定义Asynchronous
:
异步编程是并行编程的一种方式,其中一个工作单元与主应用程序线程分开运行,并向调用线程通知其完成,失败或进度。
在这里,除非您使用进行操作,否则您的工作单元是在同一线程中发生subscribeOn
的Scheduler
。因此这不是异步的。
这是否使我的代码比仅使用Mono :: map更具响应性,更好,更快?
没门。由于在这种情况下,发布者会Mono.just("hello " + name)
立即通知订阅者我已经完成,因此正在进行处理的线程会立即从事件循环中拾取该事件并开始处理响应。
相反,map
与仅转换元素的a相比,这可能在内部导致较少的操作。
因此,理想情况下,flatMap
当您有I / O操作(例如DB调用)或网络调用时,应该使用,这可能需要一些时间,如果所有线程都忙,则可以将其用于执行其他任务。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句