2

我调用 abort() 并且在 execute() 中阻塞的线程不会解除阻塞,直到它因异常而超时。它可能需要超过 10 秒,所以这是一个大问题。

我环顾四周,找不到这个问题的答案。

文档说 abort() 应该导致 execute() 阻塞 i/o 立即解除阻塞。研究表明,这个问题在不久前就得到了解决。

当然,我从不同的线程调用 abort() 和 execute()。我的代码没有什么特别之处,所以我不会浪费空间列出它。

我发现一些帖子建议在 HttpClient 下弄乱套接字等,但这些帖子也都不起作用。

4

1 回答 1

0

您只是希望 HttpGet 在已知时间后超时,还是有理由必须尝试取消获取?我怀疑中止只有在它有一个要读取的响应流之后才起作用……就像中止长时间的下载一样。您可以尝试使用 URLConnection 而不是 HttpGet,它允许您独立设置读取和连接超时。

URL url= new URL(urlString);
        URLConnection conn = url.openConnection();
        conn.setConnectTimeout(getInstance().getConnectionTimeout());
        conn.setReadTimeout(getInstance().getReadTimeout());
        if (encodedPostargs != null)
        {
            conn.setDoOutput(true);
            OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());
            out.write(encodedPostargs);
            out.flush();
            out.close();
        }
        return new BufferedReader(new InputStreamReader(conn.getInputStream()));
于 2011-09-04T18:48:54.857 回答