@Override
  public Future<Long> readInto(final AsyncWritableChannel asyncWritableChannel, final Callback<Long> callback) {
    if (!isOpen()) {
      throw new IllegalStateException("Channel is not open");
    }

    final FutureResult<Long> future = new FutureResult<Long>();
    executorService.submit(new Runnable() {
      @Override
      public void run() {
        try {
          release.await();
        } catch (InterruptedException e) {
          // move on.
        }
        long result = 0;
        Exception exception = null;
        try {
          result = asyncWritableChannel.write(buffer, callback).get();
        } catch (Exception e) {
          exception = e;
        }
        future.done(result, exception);
      }
    });
    return future;
  }
Object that wraps another {@link ReadableStreamChannel} and simply blocks on read until released.
ambry-rest/src/test/java/com/github/ambry/rest/AsyncRequestResponseHandlerTest.java