Java - AsyncHttpClient - 中止正在进行的异步调用

时间:2018-01-26 12:33:49

标签: java multithreading asynchttpclient

我正在使用HttpAsyncClientGET一些网址。在某些情况下,让我们说当我收到状态HTTP-304时,我想放弃正在进行的通话。我不想等待身体,我不想花机器资源。有没有办法取消这个?显然,futureResponse.cancel(true)futureResponse.finalize()之类的内容无效。

Future<Response> futureResponse = httpClient.prepareGet("some-url").addHeader("some", "header").execute(new AsyncCompletionHandler<Response>() {
    @Override
    public State onStatusReceived(HttpResponseStatus status) throws Exception {
        logger.info("status {}", status);
        // CONDITIONAL FINISH THIS CALL
        return super.onStatusReceived(status);
    }

    @Override
    public Response onCompleted(Response response) throws Exception {
        logger.info("its ok");
        return response;
    }

    @Override
    public void onThrowable(Throwable t) {
        logger.error(t);
    }
});

1 个答案:

答案 0 :(得分:1)

来自doc

您可以返回ABORT以关闭连接。

    @Override
    public State onStatusReceived(HttpResponseStatus responseStatus) throws Exception {
        Integer status = responseStatus.getStatusCode();
        if (304 == status) {  // CONDITIONAL FINISH THIS CALL
            return State.ABORT;
        } else {
            doSomething()
            return ...
        }           
    }