Android – Kotlin: valor de retorno en la diversión asíncrona

Me gustaría preguntar si es posible 'devolver' un valor de una function si la function está haciendo AsyncTask.

Por ejemplo :

fun readData() : Int{ val num = 1; doAsync { for (item in 1..1000000){ num += 1; } } return num; } 

El problema en esta function es que AsyncTask aún no ha terminado, así que obtengo un valor incorrecto de la function, ¿alguna idea de cómo resolverlo?

está utilizando una interfaz es el único por qué o hay un controller de compilation como en Swift?

Si realiza algún cálculo de forma asíncrona, no puede devolver el valor directamente, ya que no sabe si el cálculo ha finalizado todavía. Podrías esperar a que se termine, pero eso haría que la function vuelva a ser síncrona. En cambio, deberías trabajar con devoluciones de llamada:

 fun readData(callback: Int -> Unit) { val num = 1 doAsync { for (item in 1..1000000){ num += 1 } callback(num) } } 

Y en callsite:

 readData { num -> [do something with num here] } 

También podría probar Kotlin coroutines , que hace que el código asynchronous parezca un código síncrono normal, pero puede ser un poco complejo para principiantes. (Por cierto, no necesitas punto y coma en Kotlin).

No solo en kotlin , esto no es posible en ningún lenguaje de progtwigción to return from a async method . Pero lo que puedes hacer es:

  1. Usa co-routines como Christian sugirió.
  2. Use un enfoque reactivo como RxJava or RxKotlin y trate el flujo de datos donde, aunque no puede regresar de su método en un hilo diferente, puede observar el tipo de retorno de la function desde un hilo diferente.
  3. Si está haciendo cosas muy simples, las Callbacks pueden ser útiles.