Add Deferred.joinAll helper
This commit is contained in:
parent
402b8bb1b3
commit
c9eb3df93d
@ -120,6 +120,25 @@ class TestCoroutines {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testJoinAll() = runTest {
|
||||||
|
eval(
|
||||||
|
"""
|
||||||
|
val replies = (1..6).map { n ->
|
||||||
|
launch {
|
||||||
|
delay((7 - n) * 5)
|
||||||
|
"done:${'$'}n"
|
||||||
|
}
|
||||||
|
}.joinAll()
|
||||||
|
|
||||||
|
assertEquals(
|
||||||
|
["done:1", "done:2", "done:3", "done:4", "done:5", "done:6"],
|
||||||
|
replies
|
||||||
|
)
|
||||||
|
""".trimIndent()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testFlows() = runTest {
|
fun testFlows() = runTest {
|
||||||
eval("""
|
eval("""
|
||||||
|
|||||||
@ -29,6 +29,16 @@ extern class Deferred {
|
|||||||
val isCancelled: Bool
|
val isCancelled: Bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Await every task in order and return collected results. */
|
||||||
|
fun Iterable<Deferred>.joinAll(): List<Object> {
|
||||||
|
var results: List<Object> = List()
|
||||||
|
for( task in this ) {
|
||||||
|
val deferred = task as Deferred
|
||||||
|
results += deferred.await()
|
||||||
|
}
|
||||||
|
results
|
||||||
|
}
|
||||||
|
|
||||||
/* A deferred result that can be completed manually. */
|
/* A deferred result that can be completed manually. */
|
||||||
extern class CompletableDeferred : Deferred {
|
extern class CompletableDeferred : Deferred {
|
||||||
fun complete(value: Object): void
|
fun complete(value: Object): void
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user