Flux - Cancelled 和 Terminated 不是相互排斥的吗?
Flux - Cancelled and Terminated not mutually exclusive?
我正在尝试围绕 Flux 执行包装跟踪跨度,并希望通过使用 doOnCancel 添加标记来特别处理“已取消”信号,同时我使用 doOnTerminate 定期终止 Flux。
那时我注意到有些情况下 Flux 被视为已取消,即使它也已终止。这是设计使然吗?我的理解是这些状态是相互排斥的。
Flux.just("a")
.doOnCancel(() -> System.out.println("cancelled"))
.doOnTerminate(() -> System.out.println("terminated"))
.blockFirst();
这会打印:
已取消
已终止
有没有办法查明 Flux 是否被取消但没有终止?
这两个信号在 Reactive Streams 规范中确实不相互排斥:取消是异步的,可以在 Publisher
调用取消 Subscriber
的 onComplete
时完成或 onError
方法,因此这两个副作用都被调用的可能性。
取消的 Subscription
甚至可能会推送一些 onNext
事件(从概念上讲,这样的 onNext
在订阅被取消的那一刻将处于“飞行中”)。
我正在尝试围绕 Flux 执行包装跟踪跨度,并希望通过使用 doOnCancel 添加标记来特别处理“已取消”信号,同时我使用 doOnTerminate 定期终止 Flux。
那时我注意到有些情况下 Flux 被视为已取消,即使它也已终止。这是设计使然吗?我的理解是这些状态是相互排斥的。
Flux.just("a")
.doOnCancel(() -> System.out.println("cancelled"))
.doOnTerminate(() -> System.out.println("terminated"))
.blockFirst();
这会打印:
已取消
已终止
有没有办法查明 Flux 是否被取消但没有终止?
这两个信号在 Reactive Streams 规范中确实不相互排斥:取消是异步的,可以在 Publisher
调用取消 Subscriber
的 onComplete
时完成或 onError
方法,因此这两个副作用都被调用的可能性。
取消的 Subscription
甚至可能会推送一些 onNext
事件(从概念上讲,这样的 onNext
在订阅被取消的那一刻将处于“飞行中”)。