1

作为主题,第 4 个变体Mono.subscribe似乎没有调用成功消费者和完整消费者。它只调用订阅消费者。

下面的代码失败了

    CountDownLatch latch = new CountDownLatch(3);
    Mono.just(1).subscribe(i -> latch.countDown(), throwable -> {}, latch::countDown, s -> latch.countDown());
    boolean success = latch.await(1, TimeUnit.SECONDS);
    Assert.assertEquals(true, success);
4

1 回答 1

1

那是因为subscribewith a的版本Consumer<Subscription>是为了让你驱动初始的request. 如果您不调用request(n)消费者中的订阅,则不会发出任何数据并且Mono不会完成......

这按预期工作:

CountDownLatch latch = new CountDownLatch(3);
Mono.just(1).subscribe(
            i -> latch.countDown(),
            throwable -> {},
            latch::countDown,
            s -> {
                s.request(Long.MAX_VALUE);
                latch.countDown();
            });
boolean success = latch.await(1, TimeUnit.SECONDS);
Assert.assertEquals(true, success);
于 2017-01-18T09:03:22.720 回答