@Override
    public void doOnResponse(Object result) {
        if (rpcFuture == null) {
            return;
        }
        ClassLoader oldCl = Thread.currentThread().getContextClassLoader();
        SofaResponse response = (SofaResponse) result;
        try {
            Thread.currentThread().setContextClassLoader(this.classLoader);
            RpcInternalContext.setContext(context);

            if (EventBus.isEnable(ClientAsyncReceiveEvent.class)) {
                EventBus.post(new ClientAsyncReceiveEvent(consumerConfig, providerInfo,
                    request, response, null));
            }

            pickupBaggage(response);

            // do async filter after respond server
            FilterChain chain = consumerConfig.getConsumerBootstrap().getCluster().getFilterChain();
            if (chain != null) {
                chain.onAsyncResponse(consumerConfig, request, response, null);
            }

            recordClientElapseTime();
            if (EventBus.isEnable(ClientEndInvokeEvent.class)) {
                EventBus.post(new ClientEndInvokeEvent(request, response, null));
            }
            decode(response);
            rpcFuture.setSuccess(response);
        } finally {
            Thread.currentThread().setContextClassLoader(oldCl);
            RpcInvokeContext.removeContext();
            RpcInternalContext.removeAllContext();
        }
    }
Instantiates a new FutureInvokeClientHandler.

@param consumerConfig the consumer config
@param providerInfo   the provider info
@param rpcFuture      the rpc future
@param request        the request
@param context        the context
@param classLoader    the class loader
remoting/remoting-http/src/main/java/com/alipay/sofa/rpc/transport/http/FutureInvokeClientHandler.java