Kotlin Coroutines en un service de Android

Tengo un service de Android que inicia y sincroniza diferentes types de datos con el server cuando está en línea. Soy nuevo en corotines Kotlin y estoy tratando de lograr lo siguiente:

fun syncData{ //Job1 make retrofit call to server //Job2 make retrofit call to server after job1 is done. //Job3 make retrofit call to server after job 2 is done and so on. //After all jobs are done I'll stop service. } 

Estoy siguiendo esta publicación: Kotlin Coroutines es el path correcto en Android

Lo que me trajo esta solución:

 fun syncData() = async(CommonPool){ try{ val sync1 = async(CommonPool){ job1.sync() } val sync2 = async(CommonPool){ job2.sync() } val sync3 = async(CommonPool){ job3.sync() } val sync4 = async(CommonPool){ job4.sync() } job1.await() job2.await() job3.await() job4.await() }catch (e: Exception){ }finally { stopSelf() } } 

Pero cuando recibo la actualización de Logcat, cada llamada se mezcla. Las llamadas de job3 vienen antes de job1, y así sucesivamente. ¿Cómo puedo ejecutar entonces en una tubería? Estoy algo perdido en las corotinas de Kotlin, así que no sé exactamente cómo implementar esto.

Gracias por adelantado.

Si tiene que ejecutarlos uno tras otro y, como usted dice, dependen el uno del otro, no es un caso de uso válido para la ejecución simultánea, como lo está haciendo con Coroutines aquí. Solo hazlo secuencialmente, entonces.

En el ejemplo, está despachando todas las tareas y esperando la ejecución al final, después de que todas las tareas ya fueron entregadas para su ejecución. Es totalmente aleatorio cuál se ejecutará primero.

Funcionaría si, por ejemplo, Job1, Job2 y Job3 fueran independientes el uno del otro y pudieran ejecutarse en paralelo. Luego enviarías a cada uno de ellos a una Corutina y al final espera a que se complete. No le importaría la order de ejecución .

Estas ideas son independientes de corutinas y son válidas para cada estilo de progtwigción concurrente.

  • Corutinas de testing unitaria en el hilo de UI
  • No se puede detectar el lanzamiento de exception después de que se cancela Kotlin coroutine
  • Variables "coroutine local" en kotlin
  • Vertx plus Koutlin coroutines cuelga para siempre
  • Cuál es la diferencia entre launch / join y async / await en Kotlin coroutines
  • Kotlin Process Collection En Paralelo?
  • Unidad probando una corotina de Kotlin con retraso
  • ¿Se pueden usar corotines Kotlin "experimentales" en la producción?
  • Corutinas paralelas de Kotlin
  • ¿Por qué es imposible utilizar las references de methods para las funciones `suspender` en Kotlin?
  • ¿Cuál es la diferencia entre CoroutineContext y Job en kotlinx.coroutines?