为了账号安全,请及时绑定邮箱和手机立即绑定

SignalType.CANCEL 忽略 publishOn 运算符

SignalType.CANCEL 忽略 publishOn 运算符

慕田峪7331174 2022-05-25 16:25:37
我想知道为什么取消信号的处理方式与其他方式不同。有人知道这是不是故意的吗?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()
查看完整描述

1 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

仅当publishOn信号从源发出并传播到下游时,才会调用操作符。

然而,取消请求被转发到上游,然后处理程序被执行。源不发出取消信号。


查看完整回答
反对 回复 2022-05-25
  • 1 回答
  • 0 关注
  • 85 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号