67857


KotlinのCoroutineで大量の処理を複数実行したいです。処理を並列実行するには以下のように、asyncで動かして、awaitで待ち合せればいいとのことですが、この処理が大量にある場合はどうしたらいいのでしょうか？

例えば以下のprocess関数に1～1000を代入して関数を走らせるとします。それぞれの処理に1秒かかるとしたら、普通にやれば1000秒、並列処理で行えば1秒で処理が終わることになります。しかし、以下のように1000個すべてにawait()と書くわけにもいきませんし、そもそも1000という数が動的に変わる値であったら対応できません。

このような場合はどのように並列処理を実現するのでしょうか？

[code]

    fun runMain(): Job = scope.launch {
        val price1 = async { process(1) }
        val price2 = async { process(2) }
        println("Result: ${price1.await()}, ${price2.await()}")
    }
    
[/code]

※マルチポスト  
少し急いでいますので、マルチポストさせていただきます。[Taratail](https://teratail.com/questions/271128)


CC BY-SA 4.0
2020-06-18T16:31:49.770
67791
2020-06-21T04:56:37.733
question
kotlin
Coroutineで大量の処理を並列実行したい


解決しました。  
以下のようにループでコルーチンを作成し、awaitで待ち合わせればいいそうです。  
ありがとうございました。

[code]

    // count個のasyncを起動して待ち合わせ
    val prices = (1..count)
        .map { async { process(it) } }
        .map { it.await() }
    println("Results: ${prices})
    
[/code]


CC BY-SA 4.0
2020-06-21T04:56:37.733
67857
2020-06-21T04:56:37.733
67791
answer