同时由两个协程调用两次函数

问题描述 投票:0回答:2

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

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")
        }
    }
}

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

我该怎么做?

asynchronous kotlin coroutine kotlin-coroutines simultaneous
2个回答
0
投票

协程调度程序无法在代码中的任何地方从一个协程跳转到另一个协程(就像线程一样)。协程中的所有非暂挂(阻塞)代码都被立即调用,并且只有当协程为suspended


0
投票
runBlocking使用事件循环作为协程调度程序的默认值。使用事件循环,只能在事件线程上同时运行一个协程。
© www.soinside.com 2019 - 2024. All rights reserved.