@Nullable
  private Object invokeAsync(Method method, Object[] args) throws Throwable {
    final Call call = new Call(method, args);

    if (!myQueue.first.offer(call)) {
      throw new VMPausedException();
    }

    Call.Result result;
    final long start = System.currentTimeMillis();
    do {
      do {
        result = myQueue.second.poll(200, TimeUnit.MILLISECONDS);

        if (myPausedRef.get() || result == null && System.currentTimeMillis() - start > MAX_TIMEOUT) {
          throw new VMPausedException();
        }
      }
      while (result == null);
    }
    while (!result.isFromCall(call));

    return result.getValue();
  }
@Nullable
  private Object invokeAsync(Method method, Object[] args)