code: @Override
    public <T> Map<String, T> getBulk(Iterator<String> keyIter,
        Transcoder<T> tc) {
      try {
        return asyncGetBulk(keyIter, tc).get(operationTimeout,
            TimeUnit.MILLISECONDS);
      } catch (InterruptedException e) {
        throw new RuntimeException("Interrupted getting bulk values", e);
      } catch (ExecutionException e) {
        if(e.getCause() instanceof CancellationException) {
          throw (CancellationException) e.getCause();
        } else {
          throw new RuntimeException("Exception waiting for bulk values", e);
        }
      } catch (TimeoutException e) {
        throw new OperationTimeoutException("Timeout waiting for bulk values: "
          + buildTimeoutMessage(operationTimeout, TimeUnit.MILLISECONDS), e);
      }
    }
docs: Get the values for multiple keys from the cache.
  
  @param <T>
  @param keyIter Iterator that produces the keys
  @param tc the transcoder to serialize and unserialize value
  @return a map of the values (for each value that exists)
  @throws OperationTimeoutException if the global operation timeout is
  exceeded
  @throws CancellationException if operation was canceled
  @throws IllegalStateException in the rare circumstance where queue is too
  full to accept any more requests