Kotlin 相当于 C# Task.WhenAll

标签 kotlin coroutine

是否有与 C# 等效的 Kotlin Task.WhenAll ?

我想出了下面的代码,但我想知道是否可以写whenAll以便它只暂停一次。

fun main(args: Array<String>) = runBlocking {
    println("Start")
    val serviceA = KotlinServiceA()
    val serviceB = KotlinServiceB()

    val deferredA = async(CommonPool) { serviceA.operationA() }
    val deferredB = async(CommonPool) { serviceB.operationB() }

    var tasks = arrayOf(deferredA, deferredB)
    tasks.whenAll()

    println("End")
}

suspend fun Array<Deferred<Unit>>.whenAll() : Unit {
    for (task in this) {
        task.await()
    }
}

最佳答案

有一个awaitAll()完成工作的功能。

val deferredArray: Array<Deferred<Unit>>  =  arrayOf()
val awaitAllArray = awaitAll(*deferredArray)

如果您与 Collection 合作那么你可以使用 awaitAll()扩展功能
val deferredList: List<Deferred<Unit>>  =  listOf()
val awaitAllList = deferredList.awaitAll()

关于Kotlin 相当于 C# Task.WhenAll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52799905/

相关文章:

android - 将字节数组转换为pdf文件然后保存

java - 是否有与 Java 8 Stream 限制函数等效的 Kotlin 函数

kotlin - 如何用协程实现非阻塞

android - 显示上传图片进度 Multipart

kotlin - 如何将可变集合变成不可变集合

kotlin - 如何对同一端点并行进行多个 API 调用并将所有响应合并到输出数组中?

java - okhttp3 MediaType.parse 致命异常 : java. lang.IncompatibleClassChangeError

python - 在事件流之外运行 asyncio 协程

asynchronous - 如何 : fire and forget async coroutines in Kotlin

java - 生成器是否不如 "real"协程?