如何由两个协程同时运行两次功能?
我尝试使用以下代码:

import kotlinx.coroutines.*

fun main() = runBlocking<Unit> {
    launch {
        calculate("first")
    }
    launch {
        calculate("second")
    }
}

fun calculate(name: String) {
    var value = 0
    for (x in 1..1_000){
        value += 1
        if(x % 100 == 0){
            println("calculating $x for $name")
        }
    }
}

但是第二个协程要等到第一个协程离开函数才能运行!

我该怎么做?

最佳答案

runBlocking使用事件循环作为协程调度程序的默认值。使用事件循环,只有一个协程可以同时在事件线程上运行。

您可以指定使用线程池的任何其他调度程序,例如Dispatchers.Default,以同时运行协程。

fun main() = runBlocking<Unit>(Dispatchers.Default) {
    launch {
        calculate("first")
    }
    launch {
        calculate("second")
    }
}

10-07 23:57
查看更多