2

私は abort() を呼び出し、execute() でブロックしているスレッドは、例外でタイムアウトになるまでブロックを解除しません。10 秒以上かかる場合があるため、これは大きな問題です。

私はしばらくの間見回してきましたが、これに対する答えが見つかりません。

ドキュメントによると、abort() により、execute() ブロッキング i/o がすぐにブロック解除されるはずです。調査によると、この問題は少し前に修正されたことが示唆されています。

もちろん、別のスレッドから abort() と execute() を呼び出しています。私のコードには特別なことは何もないので、リストするスペースを無駄にしません。

私が見つけたいくつかの投稿では、HttpClient の下にあるソケットなどをいじることが提案されていましたが、どれも機能しませんでした。

4

1 に答える 1

0

既知の時間の経過後に HttpGet をタイムアウトさせたいだけですか、それとも取得をキャンセルしなければならない理由がありますか? 長いダウンロードを中止する場合のように、中止は応答ストリームが読み取られるようになった後にのみ機能すると思われます。読み取りタイムアウトと接続タイムアウトを個別に設定できる HttpGet の代わりに URLConnection を使用してみてください。

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 に答える