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
|
||||
fun testFlows() = runTest {
|
||||
eval("""
|
||||
|
||||
@ -29,6 +29,16 @@ extern class Deferred {
|
||||
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. */
|
||||
extern class CompletableDeferred : Deferred {
|
||||
fun complete(value: Object): void
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user