私は2つの中断機能を持っています:
suspend fun sendData() : Boolean
suspend fun awaitAcknowledge() : Boolean
_
そして、それらを並列に実行する必要がある3番目のサスペンド関数でそれらをラップしたい、そして両方の戻り値を持つことによって最終結果を計算したいです。
suspend fun sendDataAndAwaitAcknowledge() : Boolean {
// TODO execute both in parallel and compare both results
}
_
しかし、私がそのように書いたら、
suspend fun sendDataAndAwaitAcknowledge() : Boolean {
val sendResult = sendData()
val receiveAck = awaitAcknowledge()
}
_
関数はシリアル順序で実行され、私の場合は機能しません。
Rxjavaから来て、Zip
演算子のようなものを達成したいと思います。
Single.Zip(awaitAcknowledge(), sendData(), {receiveAck, sendResult -> ...})
_
Coroutines
でこれを行うにはどうすればいいですか?
このパターンのように使う:
suspend fun sendDataAndAwaitAcknowledge() {
val one = async { sendData() }
val two = async { awaitAcknowledge() }
println("The result is ${one.await() + two.await()}")
}
_
ご覧のとおり、2つのサスペンド関数は3番目の1つで、並行して呼ばれ、3番目の中断の楽しみは2人の他のタスクを終了するのを待ちます。