Ich benutze Retrofit 2-beta2 mit OkHttp 2.7.0.Nachrüstung 2/OkHttp: Alle laufenden Anfragen abbrechen
Um das OkHttpClient
Objekt von Retrofit erhalte ich die Retrofit .client() Methode bin mit und alle abzubrechen es Anfragen läuft, ich rufe dann ist es cancel(Object tag) Methode, aber die Anfragen halten noch läuft und ich bekomme eine Antwort.
Selbst die 's getQueuedCallCount() und des Clients geben 0 zurück, nachdem cancel() aufgerufen wurde.
Gibt es noch etwas, das ich tun muss, damit dies funktioniert? Oder könnte es ein Fehler in OkHttp sein?
Als Workaround rufe ich shutdownNow()
auf ExecutorService
des Kunden, aber ich würde eine sauberere Lösung bevorzugen.
Nach dem Durchlaufen des Quellcodes verstehe ich jetzt, warum das nicht funktioniert. Ich setze den Tag auf die "Anfrage" unter Verwendung eines Interceptors und erstelle daher ein neues "Anfrage" -Objekt. 'OkHttpClient.cancel (Object tag)' tut nichts, da die ursprüngliche 'Anfrage' (an der' cancel() 'aufgerufen wird, da sie in der Anfragewarteschlange des Dispatchers vorhanden ist) noch kein Tag gesetzt hat. Es scheint, dass Retrofit keine Methode oder Schnittstelle zur Verfügung stellt, um ein Tag auf das ursprüngliche "Request" -Objekt zu setzen. –