private <T> Cancellable operation(final OperationFuture<T> operationFuture, final FutureCallback<T> callback) {
        operationFuture.addListener(future -> {
            try {
                callback.completed(operationFuture.get());
            } catch (final ExecutionException ex) {
                if (ex.getCause() instanceof Exception) {
                    if (ex.getCause() instanceof CancellationException) {
                        callback.failed(new MemcachedOperationCancellationException(ex.getCause()));
                    } else {
                        callback.failed((Exception) ex.getCause());
                    }
                } else {
                    callback.failed(ex);
                }
            }
        });
        return Operations.cancellable(operationFuture);
    }
Create a storage backend using the given <i>memcached</i> client and
applying the given cache configuration, serialization, and hashing
mechanisms.
@param client how to talk to <i>memcached</i>
@param config apply HTTP cache-related options
@param serializer alternative serialization mechanism
@param keyHashingScheme how to map higher-level logical "storage keys"
  onto "cache keys" suitable for use with memcached
httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/memcached/MemcachedHttpAsyncCacheStorage.java