【发布时间】:2021-09-10 00:42:34
【问题描述】:
如果我想同步并阻塞直到所有元素都完成,Spring reactor 会提供 blocklast()
但是如果我想继续一点然后阻塞直到所有元素都完成怎么办?
(我不想使用 isDisposed 执行繁忙的等待)
我需要自己用 onComplete 触发的信号来做,还是有更好的内置 API?
//reactor provides blocklast if I want to be synchronous and block until all elements are done
//Integer data = Flux.range(1,10).delayElements(Duration.ofSeconds(1)).doOnNext((Integer next) -> System.out.println(next + " on thread " + Thread.currentThread().getName())).blockLast();
//but what if I want to continue a bit and then block
//do I need to do it myself like this? is there a better way?
Object signal = new Object();
Flux.range(1,10).delayElements(Duration.ofSeconds(1)).doOnNext((Integer next) -> System.out.println(next + " on thread " + Thread.currentThread().getName())).doOnComplete(()->{synchronized(signal) { signal.notify();}}).subscribe();
// do some other work here, then wait for done
synchronized (signal) {
signal.wait();
}
System.out.println("All done");
【问题讨论】:
标签: java spring reactive reactor