我想知道为什么cancel信号的处理方式与其他信号不同。有人知道这是否是故意的吗?
Scheduler scheduler = Schedulers.elastic();
Disposable disposable =
Flux.interval(Duration.ofSeconds(1))
.publishOn(scheduler)
.doFinally(signalType -> {
if (signalType == SignalType.CANCEL) {
// caller thread - why ??
} else {
// elastic thread
}
}).log()
.subscribe();例如
Mono.just(1)
.delayElement(Duration.ofSeconds(3))
.doFinally(signalType -> {
disposable.dispose();
})
.subscribe();生成输出:
14:37:36.308 [main] INFO reactor.Flux.DoFinallyFuseable.1 - | onSubscribe([Fuseable] FluxDoFinally.DoFinallyFuseableSubscriber)
14:37:36.308 [main] INFO reactor.Flux.DoFinallyFuseable.1 - | request(unbounded)
14:37:37.324 [elastic-2] INFO reactor.Flux.DoFinallyFuseable.1 - | onNext(0)
14:37:38.324 [elastic-2] INFO reactor.Flux.DoFinallyFuseable.1 - | onNext(1)
14:37:39.325 [elastic-2] INFO reactor.Flux.DoFinallyFuseable.1 - | onNext(2)
14:37:39.387 [parallel-2] INFO reactor.Flux.DoFinallyFuseable.1 - | cancel()和
Thread.sleep(4000);
disposable.dispose();生成输出:
14:39:22.380 [main] INFO reactor.Flux.DoFinallyFuseable.1 - | onSubscribe([Fuseable] FluxDoFinally.DoFinallyFuseableSubscriber)
14:39:22.380 [main] INFO reactor.Flux.DoFinallyFuseable.1 - | request(unbounded)
14:39:23.412 [elastic-2] INFO reactor.Flux.DoFinallyFuseable.1 - | onNext(0)
14:39:24.412 [elastic-2] INFO reactor.Flux.DoFinallyFuseable.1 - | onNext(1)
14:39:25.414 [elastic-2] INFO reactor.Flux.DoFinallyFuseable.1 - | onNext(2)
14:39:26.400 [elastic-2] INFO reactor.Flux.DoFinallyFuseable.1 - | onNext(3)
14:39:26.400 [main] INFO reactor.Flux.DoFinallyFuseable.1 - | cancel()发布于 2019-01-30 05:21:13
仅当信号从信号源发出并向下游传播时,才会调用publishOn运算符。
但是,取消请求被转发到上游,然后执行处理程序。源不发出取消信号。
https://stackoverflow.com/questions/54403312
复制相似问题