Junior — Middle
¿Se puede obtener el resultado de la ejecución de la función launch de forma sincrónica?
sobes.tech AI
Respuesta de la IA
La función launch en Kotlin Coroutines inicia una nueva coroutine y devuelve inmediatamente un objeto Job. No bloquea el hilo actual y no devuelve el resultado de la función que inicia. No se puede obtener directamente el resultado de launch en modo sincrónico, ya que launch está diseñado para ejecutar tareas que no devuelven valores.
Si necesitas obtener el resultado de una operación asíncrona, debes usar async, que devuelve un Deferred<T>. Entonces puedes llamar a await() para obtener el resultado, pero await() es una suspensión (suspend) y no bloquea el hilo, solo suspende la coroutine.
Ejemplo:
val job = launch {
// tarea asíncrona
}
// job no contiene resultado
val deferred = async {
// cálculo con resultado
42
}
runBlocking {
val result = deferred.await() // obtener resultado
println(result) // 42
}
Por lo tanto, no se puede obtener el resultado de launch de forma sincrónica, para ello se usa async + await.