首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SignalType.CANCEL忽略publishOn运算符

SignalType.CANCEL忽略publishOn运算符
EN

Stack Overflow用户
提问于 2019-01-28 21:42:33
回答 1查看 85关注 0票数 2

我想知道为什么cancel信号的处理方式与其他信号不同。有人知道这是否是故意的吗?

代码语言:javascript
复制
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();

例如

代码语言:javascript
复制
Mono.just(1)
    .delayElement(Duration.ofSeconds(3))
    .doFinally(signalType -> {
        disposable.dispose();
     })
    .subscribe();

生成输出:

代码语言:javascript
复制
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()

代码语言:javascript
复制
Thread.sleep(4000);
disposable.dispose();

生成输出:

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-30 05:21:13

仅当信号从信号源发出并向下游传播时,才会调用publishOn运算符。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54403312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档