¿Cómo hacer que sea apropiada una "llamada de método de bloqueo inapropiado"?


29

Actualmente estoy tratando de aprovechar más las corotinas de Kotlin. Pero me enfrento a un problema: cuando uso moshi u okhttp dentro de estas corutinas recibo una advertencia:

"llamada de método de bloqueo inapropiado"

¿Cuál es la mejor manera de arreglar esto? Realmente no quiero ser inapropiado ;-)


Supongo que no quieres suprimir la advertencia, ¿verdad?
— Saeed Entezari

Respuestas:


12

La advertencia trata sobre los métodos que bloquean el hilo actual y la rutina no puede suspenderse correctamente. De esta manera, perderá todos los beneficios de las rutinas y volverá a la calificación anterior a un trabajo por hilo.

Cada caso debe ser manejado de manera diferente. Para llamadas http suspendibles, puede usar el cliente ktor http . Pero a veces no hay una biblioteca para su caso, por lo que puede escribir su propia solución o ignorar esta advertencia.


21
Ignorar la advertencia casi nunca es lo correcto, al menos puede ejecutar el código de bloqueo withContext(Dispatchers.IO).
— Marko Topolnik

2
si ejecuta el código de withContext(Dispatchers.IO)bloqueo, ya no está bloqueando y la advertencia no es correcta, ¿verdad?
— noloman

@noloman buena pregunta porque "al menos" supone saber que alguien que hace esta pregunta no tiene. Aún así, la advertencia no desaparece cuando introduce este contenedor.
— Alex

14

También recibe esta advertencia cuando llama a una función de suspensión que está anotada con @Throws(IOException::class)(Kotlin 1.3.61). No estoy seguro si eso está destinado o no. De todos modos, puede corregir esta advertencia eliminando esa anotación o cambiándola a Exceptionclase.


Digamos que suprime, no arregla :) Supongo que el analizador estático lo resalta porque el método que arroja IOException generalmente está bloqueando y toma un tiempo valioso para terminar.
— Ivan Shafran

Encontré útil esta explicación sobre IOException: discusion.kotlinlang.org/t/…
— Ivan Shafran
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.