【发布时间】:2021-06-04 18:34:29
【问题描述】:
我有一个可能长时间运行的 Flux,我想在经过一定时间后停止它。我找到了几种执行此操作的方法,但是我正在努力解决的是如何判断 Flux 超时而不是自然完成。
示例(非常简单)代码:
Flux.range(0, 10000)
.take(Duration.ofMillis(1))
.doOnNext(System.out::println)
.collectList()
.block();
我想要的是这样的:
Flux.range(0, 10000)
.take(Duration.ofMillis(1))
.doOnNext(System.out::println)
.doOnError(t -> {
if (t instanceof TimeoutException) {
System.out.println("I timed out");
}
})
.collectList()
.block();
但是take 似乎没有通知错误;我看到的只是terminate 和complete 信号,如果我不在 Flux 中包含 take 并让它自然完成,我会得到。
我已经简要查看了确实会引发异常的 timeout 运算符,但是 timeout 看起来只有在 Flux 在特定时间内没有发出单个元素时才会引发异常,而不是如果整个 Flux 没有在特定时间内完成。
有没有人有任何关于他们如何解决这个问题的提示或示例?
提前致谢!
【问题讨论】:
标签: java project-reactor