如何由两个协程同时运行两次功能?
我尝试使用以下代码:
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")
}
}