我使用的是OkHttp 2.7.0的Retrofit 2-beta2。Retrofit 2/OkHttp:取消所有正在运行的请求
为了得到改造的OkHttpClient
对象我使用的Retrofit .client()方法,并取消所有它的运行要求,我打电话是cancel(Object tag)方法,但请求仍保持运行,我得到回应。
即使客户的Dispatcher
的getQueuedCallCount()和getRunningCallCount()在调用cancel()后返回0。
有什么我需要做的这个工作?或者它可能是OkHttp中的一个错误?
作为解决方法,我打电话shutdownNow()
在客户的ExecutorService
,但我更喜欢更清洁的解决方案。
通过源代码后,我现在明白为什么这不起作用。我使用拦截器在'Request'上设置标签,因此创建一个新的'Request'对象。 'OkHttpClient.cancel(Object tag)'不会做任何事情,因为原来的'Request'(在'Dispatcher'的请求队列中存在'cancel()'被调用)仍然没有标记集。看来Retrofit不会公开任何方法或接口在原始'Request'对象上设置标签。 –