使用Flux而不是for循环,有什么好处?
我试图让我的脑袋围绕反应式编程,所以我想问问在这里使用Flux是否有任何好处:
override fun notifyObserversOnMessage(message: Message) { Flux.fromStream(observers.stream()) .map { observer -> Mono.just(observer.reactOnMessage(message)) } .subscribe() }
代替:
override fun notifyObserversOnMessage(message: Message) { for (observer in observers) { observer.reactOnMessage(message) } }
这是否取决于每个观察员正在做的工作,如果这是IO还是不?
这取决于。
如果按顺序处理observers
是合理的,那么在这里使用Flux是没有好处的
override fun notifyObserversOnMessage(message: Message) { observers.forEach { observer -> observer.reactOnMessage(message) } }
或干脆
override fun notifyObserversOnMessage(message: Message) { observers.forEach { it.reactOnMessage(message) } }
很好。
为了天真的平行性,
override fun notifyObserversOnMessage(message: Message) { observers.parallelStream().forEach { it.reactOnMessage(message) } }
可以使用,但在这一点上,更有可能你会有额外的需求,如工作者池或超时。 在这种情况下,反应堆的表现力是有用的。