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.

  • Oyente dentro del productor
  • Tramos de resorte con capucha de spring que no anidan en corotina Kotlin
  • ¿Hay alguna forma de get el comportamiento de FixedTreadPool usando corutinas?
  • Multithreading usando Kotlin Coroutines
  • Kotlin actor a actor comunicación
  • ¿Cómo puedo conectar un productor a un actor?
  • Unidad probando una corotina de Kotlin con retraso
  • Kotlin coroutines en Android: ¿Por qué usar bg () de Anko en lugar de async ()?
  • ¿Cuál es la diferencia entre CoroutineContext y Job en kotlinx.coroutines?
  • Kotlin coroutine traga exception
  • ¿Cuál de las corutinas (goroutines y corotines de kotlin) son más rápidas?