It'd be great if there were async versions of execute. It looks easy to add: just replace FutureExecutionResponse with a real CompletableFuture, return it from the execute methods and then change the current blocking execute methods to simply call get() on them.