科特林:为什么要在承诺清单上打电话给awaitAll?

时间:2019-07-18 11:21:55

标签: kotlin kotlin-coroutines

让我们看一下这段代码:

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") } 不是扩展函数怎么办?

1 个答案:

答案 0 :(得分:3)

查看kotlinx.coroutines.awaitAll的源代码,看来awaitAll方法既是全局函数,又是Collection<Deferred<T>>模板类的扩展方法。

任何一种都应该工作得很好,并且基本上可以做同样的事情,这取决于您使用哪种更喜欢并且最适合您的标准!