Kotlin 相当于 C# Task.WhenAll
Kotlin equivalent to C# Task.WhenAll
是否有 C# Task.WhenAll 的 Kotlin 等价物?
我想出了下面的代码,但我想知道是否可以编写 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()
是否有 C# Task.WhenAll 的 Kotlin 等价物?
我想出了下面的代码,但我想知道是否可以编写 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()