在runBlocking中等待两个以上

Nik*_*han 8 kotlin kotlin-coroutines

我在Kotlin有一个问题,如果我只使用2 await秒,这个runBlocking块可以工作10秒,但是当我尝试使用4 await秒时,它可以工作20秒.据我所知,runBlocking中只有两个异步线程.我怎样才能增加这个数量呢?

fun testFun() {
    val z1 = async { Thread.sleep(10000) }
    val z2 = async { Thread.sleep(10000) }
    val z3 = async { Thread.sleep(10000) }
    val z4 = async { Thread.sleep(10000) }

    runBlocking {
        z1.await()
        z2.await()
        z3.await()
        z4.await() // works 20 seconds
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*nik 5

随着async { ... }你让标准库选择在运行协同程序默认的情况下,我想在你的情况下,它碰巧是一个线程池只有两个线程.

为了控制发生的事情,请使用

async(MyDispatcher) { ... }
Run Code Online (Sandbox Code Playgroud)

其中,作为一个简单的例子,您可以定义

val MyDispatcher = Executors.newFixedThreadPool(4).asCoroutineDispatcher()
Run Code Online (Sandbox Code Playgroud)

请记住,关闭线程池现在是您的责任:

MyDispatcher.close()
Run Code Online (Sandbox Code Playgroud)