web-dev-qa-db-fra.com

Courir deux coroutines de kotlin à l'intérieur de la Coroutin en parallèle

J'ai deux fonctions de suspension:

suspend fun sendData() : Boolean 

suspend fun awaitAcknowledge() : Boolean

et je veux les envelopper dans une troisième fonction de suspension dans laquelle ils doivent être exécutés en parallèle et je souhaite calculer le résultat final en ayant les deux valeurs de retour:

suspend fun sendDataAndAwaitAcknowledge() : Boolean {
    // TODO execute both in parallel and compare both results
}

Cependant, si j'écris comme ça,

suspend fun sendDataAndAwaitAcknowledge() : Boolean {
    val sendResult = sendData()
    val receiveAck = awaitAcknowledge()
}

les fonctions seront exécutées dans un ordre de série, qui ne fonctionnera pas dans mon cas.

En venant de Rxjava, j'aimerais réaliser quelque chose comme l'opérateur Zip:

Single.Zip(awaitAcknowledge(), sendData(), {receiveAck, sendResult -> ...})

Comment puis-je faire cela avec Coroutines?

9
Christopher

Utilisez comme ce motif:

    suspend fun sendDataAndAwaitAcknowledge() {
     val one = async { sendData() }
     val two = async { awaitAcknowledge() }
     println("The result is ${one.await() + two.await()}")
    }

comme vous pouvez le constater, deux fonctions de suspension sont appelées en troisième et en parallèle, la troisième suspension de la suspension attendra aux deux autres de finir leurs tâches.

0
user3089483