【问题标题】:Flux parallel operation and a blocking task post the parallel operationFlux 并行操作和阻塞任务发布并行操作
【发布时间】:2018-12-07 07:05:39
【问题描述】:

我是响应式编程的新手。我有一段代码只有在并行任务结束后才应该并行运行,然后它应该被执行

 //step 1 parallel stuff
Flux.fromIterable( sourceOneMap.keySet() )
.parallel()
.runOn( Schedulers.parallel() )
.subscribe( compId -> {
 Mono.just( compId )
.then( checkIfSystemTwoContainsSystemOneInfo(compId,sourceOneMap,sourceTwoMap,new Timestamp( new Date().getTime() )) )
.doOnError( e -> log.info( "error {}",  e.getStackTrace()) );} );
 //step 2
 return new MissingCountResult( rtbmDao.findCount(), new Date() );

现在,当我运行我的代码时,首先执行第 2 步,然后第 1 步。第 2 步取决于第 1 步。第 1 步应该首先竞争。有没有办法我可以阻止第 2 步,直到第 1 步结束。

【问题讨论】:

  • 阻止你的响应式代码是个坏主意,因为你失去了响应式方法的优势,更好的方法是将你的代码组合到一个链中并返回 MissingCountResult 的 Mono

标签: java spring-boot reactive-programming project-reactor


【解决方案1】:

使用反应式编程的目的是使代码异步而不是阻塞。 是的,您可以通过不使用 subscribe 而是使用 .block() 来阻止 step1 完成,但这不是反应式编程的重点 如果你想让它保持响应,你最好返回一个流

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    • 2011-04-11
    • 2019-05-29
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多