@Override
    public SofaResponse invoke() {
        if (isCircuitBreakerOpen() && LOGGER.isWarnEnabled(invoker.getConfig().getAppName())) {
            LOGGER.warnWithApp(invoker.getConfig().getAppName(), "Circuit Breaker is opened, method: {}#{}",
                invoker.getConfig().getInterfaceId(), request.getMethodName());
        }
        HystrixResponseFuture delegate = new HystrixResponseFuture(this.queue());
        try {
            boolean finished = lock.await(getLockTimeout(), TimeUnit.MILLISECONDS);
            if (!finished && !this.isExecutionComplete()) {
                throw new SofaTimeOutException(
                    "Asynchronous execution timed out, please check Hystrix configuration. Events: " +
                        getExecutionEventsString());
            }
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
        RpcInternalContext.getContext().setFuture(delegate);
        if (this.sofaResponse == null) {
            this.sofaResponse = buildEmptyResponse(request);
        }
        return this.sofaResponse;
    }
{@link HystrixCommand} for async requests

@author <a href=mailto:scienjus@gmail.com>ScienJus</a>
fault/fault-hystrix/src/main/java/com/alipay/sofa/rpc/hystrix/SofaAsyncHystrixCommand.java