私は、OkHttp 2.7.0でRetrofit 2-beta2を使用しています。Retrofit 2/OkHttp:実行中のリクエストをすべてキャンセルします。
私はRetrofit .client()メソッドを使用していますし、それが要求を実行しているすべてをキャンセルし、私はそれがcancel(Object tag)方法だ呼んでいるが、要求はまだ実行し続けると私は応答を取得レトロフィットからOkHttpClient
オブジェクトを取得します。
クライアントのDispatcher
でも、getQueuedCallCount()とgetRunningCallCount()は、cancel()を呼び出した後に0を返します。
これが機能するために必要なことは他にありますか?あるいは、それはOkHttpのバグでしょうか?
回避策として、クライアントのExecutorService
にshutdownNow()
と電話していますが、私はよりクリーンなソリューションを希望します。
ソースコードを調べた後に、なぜこれが機能しないのか理解できました。インターセプタを使って 'Request'にタグを設定しているので、新しい' Request'オブジェクトを作成しています。 'Cancel()'が 'Dispatcher'のリクエストキューに存在しているので、元の' Request'がまだタグセットを持っていないので、 'OkHttpClient.cancel(Object tag)'は何もしません。 Retrofitは元の 'Request'オブジェクトにタグを設定するメソッドやインタフェースを公開していないようです。 –