在ExecutorService上发布的Mono / Flux并未按预期终止

我在此线程中对该提案进行了一些测试: flux within executorservice

为了简化起见,我将示例简化了一些。因此,这里是示例:

    ExecutorService executorService = Executors.newSingleThreadExecutor();
    Flux.just("1","2","3").subscribeon(Schedulers.fromExecutorService(executorService)).doOnNext(System.out::println).subscribe();

    try {
        executorService.awaitTermination(10,TimeUnit.SECONDS);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } finally {
        executorService.shutdownNow();
    }

但是,如果现在执行此命令,它将始终等待主线程结束之前的10秒。我在期待什么?我期望执行程序服务最多等待10秒,然后再继续执行并调用shutdown。通常,它应该在几毫秒内完成,并在打印1、2、3之后立即返回。javadoc在这里说:

  

阻塞,直到关闭请求后所有任务完成执行,或者发生超时,或者当前线程被中断(以先发生者为准)。

我不明白。怎么了?

另一个可以立即运行并结束的示例(但我认为这是错误的):

        ExecutorService executorService = Executors.newSingleThreadExecutor();
    Flux.range(1,1_000_000).subscribeon(Schedulers.fromExecutorService(executorService)).doOnNext(System.out::println).subscribe();
    executorService.shutdownNow();

但是,在这里,我希望主线程不会等到磁通完成(分别是执行服务)。但是确实如此。以我的理解,根据javadoc的描述,这两个示例完全颠倒了。 javadoc说:

  

此方法不等待主动执行的任务终止。使用awaitTermination可以做到这一点。

有什么想法吗?

问候 贝尔纳多

wxh19871203 回答:在ExecutorService上发布的Mono / Flux并未按预期终止

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3124581.html

大家都在问