private void invoke()

in src/main/java/com/spotify/futures/ConcurrencyReducer.java [149:177]


  private void invoke(final CompletableFuture<T> response,
                      final Callable<? extends CompletionStage<T>> callable) {
    final CompletionStage<T> future;
    try {
      future = callable.call();
      if (future == null) {
        limit.release();
        response.completeExceptionally(new NullPointerException());
        return;
      }
    } catch (Throwable e) {
      limit.release();
      response.completeExceptionally(e);
      return;
    }

    future.whenComplete(
        (result, t) -> {
          if (t != null) {
            limit.release();
            response.completeExceptionally(t);
            pump();
          } else {
            limit.release();
            response.complete(result);
            pump();
          }
        });
  }