让我们看一下这段代码:
app.Query(x => x.Id("CustomView").Invoke("IsSwitchedOn"));
以上我们将import kotlinx.coroutines.*
fun main() = runBlocking {
val deferreds: List<Deferred<Int>> = (1..3).map {
async {
delay(50L * it)
it
}
}
val sum = awaitAll(deferreds[0], deferreds[1], deferreds[2]).sum()
println("$sum")
}
称为varargs。 source code for awaitAll
的外观如下:
awaitAll
但是显然,我们也可以在承诺列表中调用public suspend fun <T> awaitAll(vararg deferreds: Deferred<T>): List<T> =
if (deferreds.isEmpty()) emptyList() else AwaitAll(deferreds).await()
:
awaitAll
如果import kotlinx.coroutines.*
fun main() = runBlocking {
val deferreds: List<Deferred<Int>> = (1..3).map {
async {
delay(50L * it)
it
}
}
val sum2 = deferreds.awaitAll().sum()
println("$sum2")
}
不是扩展函数怎么办?
答案 0 :(得分:3)
查看kotlinx.coroutines.awaitAll
的源代码,看来awaitAll
方法既是全局函数,又是Collection<Deferred<T>>
模板类的扩展方法。
任何一种都应该工作得很好,并且基本上可以做同样的事情,这取决于您使用哪种更喜欢并且最适合您的标准!