@Override
    public CompletableFuture<Response> execute(
        Request request, Options options, Optional<C> requestContext) {
      final CompletableFuture<Response> result = new CompletableFuture<>();
      final Future<?> future =
          executorService.submit(
              () -> {
                try {
                  result.complete(client.execute(request, options));
                } catch (final Exception e) {
                  result.completeExceptionally(e);
                }
              });
      result.whenComplete(
          (response, throwable) -> {
            if (result.isCancelled()) {
              future.cancel(true);
            }
          });
      return result;
    }
Executes the request asynchronously. Calling {@link CompletableFuture#cancel(boolean)} on the
result may cause the execution to be cancelled / aborted, but this is not guaranteed.

@param request safe to replay
@param options options to apply to this request
@param requestContext - the optional context, for example for storing session cookies. The
    client should update this appropriately based on the received response before completing
    the result.
@return a {@link CompletableFuture} to be completed with the response, or completed
    exceptionally otherwise, for example with an {@link java.io.IOException} on a network error
    connecting to {@link Request#url()}.
core/src/main/java/feign/AsyncClient.java