@Override
	public Mono<PooledRef<Connection>> acquire() {
		return new BorrowerMono(this, Duration.ZERO);
	}
@Test
	void pendingTimeout() throws Exception {
		EmbeddedChannel channel = new EmbeddedChannel();
		PoolBuilder<Connection, PoolConfig<Connection>> poolBuilder =
				PoolBuilder.from(Mono.just(Connection.from(channel)))
				           .maxPendingAcquire(10)
				           .sizeBetween(0, 1);
		Http2Pool http2Pool = poolBuilder.build(config -> new Http2Pool(config, null));

		CountDownLatch latch = new CountDownLatch(3);
		ExecutorService executorService = Executors.newFixedThreadPool(20);
		try {
			CompletableFuture<?>[] completableFutures = new CompletableFuture<?>[4];
			for (int i = 0; i < completableFutures.length; i++) {
				completableFutures[i] = CompletableFuture.runAsync(
						() -> http2Pool.acquire(Duration.ofMillis(10))
								.doOnEach(sig -> channel.runPendingTasks())
								.doOnError(t -> latch.countDown())
								.onErrorResume(PoolAcquireTimeoutException.class, t -> Mono.empty())
								.block(),
						executorService);
			}

			CompletableFuture.allOf(completableFutures).join();
			assertThat(latch.await(5, TimeUnit.SECONDS)).isTrue();
		}
		finally {
			channel.finishAndReleaseAll();
			Connection.from(channel).dispose();
			executorService.shutdown();
		}
	}