Ich versuche derzeit, Kotlin-Coroutinen stärker zu nutzen. Aber ich habe ein Problem: Wenn ich Moshi oder Okhttp in diesen Coroutinen verwende, bekomme ich eine Warnung:
"unangemessener Aufruf der Blockierungsmethode"
Was ist der beste Weg, um diese zu beheben? Ich möchte wirklich nicht unangemessen sein ;-)
Antworten:
Die Warnung bezieht sich auf Methoden, die den aktuellen Thread blockieren und die Coroutine kann nicht ordnungsgemäß angehalten werden. Auf diese Weise verlieren Sie alle Vorteile von Coroutinen und führen erneut ein Downgrade auf einen Job pro Thread durch.
Jeder Fall sollte anders behandelt werden. Für suspendierbare http-Aufrufe können Sie den ktor http-Client verwenden . Manchmal gibt es jedoch keine Bibliothek für Ihren Fall, sodass Sie entweder Ihre eigene Lösung schreiben oder diese Warnung ignorieren können.
quelle
withContext(Dispatchers.IO)
.withContext(Dispatchers.IO)
, wird er nicht mehr blockiert und die Warnung ist nicht korrekt, oder?Diese Warnung erhalten Sie auch, wenn Sie eine Suspendierungsfunktion aufrufen, die mit
@Throws(IOException::class)
(Kotlin 1.3.61) versehen ist. Ich bin mir nicht sicher, ob das beabsichtigt ist oder nicht. Auf jeden Fall können Sie diese Warnung beheben, indem Sie diese Anmerkung entfernen oder inException
Klasse ändern .quelle