code: @Override
    public <T> CASValue<T> gets(String key, Transcoder<T> tc) {
      try {
        return asyncGets(key, tc).get(operationTimeout, TimeUnit.MILLISECONDS);
      } catch (InterruptedException e) {
        throw new RuntimeException("Interrupted waiting for value", e);
      } catch (ExecutionException e) {
        if(e.getCause() instanceof CancellationException) {
          throw (CancellationException) e.getCause();
        } else {
          throw new RuntimeException("Exception waiting for value", e);
        }
      } catch (TimeoutException e) {
        throw new OperationTimeoutException("Timeout waiting for value", e);
      }
    }
docs: Gets (with CAS support) with a single key.
  
  @param <T>
  @param key the key to get
  @param tc the transcoder to serialize and unserialize value
  @return the result from the cache and CAS id (null if there is none)
  @throws OperationTimeoutException if 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