private <T> CompletableFuture<T> asyncIO(IOOperation<T> f) { return f.executeAsync(executor); } }
default CompletableFuture<T> executeAsync(Executor executor) { return CompletableFuture.supplyAsync(() -> { try { return execute(); } catch (IOException e) { throw new CompletionException(e); } }, executor); } }