Параллельная работа потока и блокирующая задача после параллельной операции - PullRequest
0 голосов
/ 07 декабря 2018

Я новичок в реактивном программировании. У меня есть кусок кода, который должен выполняться параллельно только после того, как параллельное задание закончится над кодом, после которого оно должно быть выполнено

 //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.

1 Ответ

0 голосов
/ 19 декабря 2018

Смысл использования реактивного программирования состоит в том, чтобы асинхронный код не блокировался.Да, вы можете заблокировать шаг1, чтобы завершить, не используя подписку, а используя .block (), но это не является точкой реактивного программирования, если вы хотите, чтобы оно было реактивным, вам лучше вернуть поток

...