David W
12/03/2021, 10:05 PMfun main() {
val scope = CoroutineScope(Job())
scope.launch { println("launch") }
}
fun main() {
val scope = CoroutineScope(Job())
scope.launch { println("launch") }
scope.launch { println("launch") }
}
David W
12/03/2021, 10:05 PMDavid W
12/03/2021, 10:06 PMJoffrey
12/03/2021, 10:06 PMmain
method you probably want to use runBlocking
to launch coroutines (and wait for all of them automatically)David W
12/03/2021, 10:07 PMCoroutineScope(Job()).launch { println("launch") }
CoroutineScope(Job()).launch { println("launch") }
This prints nothing.David W
12/03/2021, 10:07 PMJoffrey
12/03/2021, 10:08 PMDavid W
12/03/2021, 10:10 PMCoroutineScope(Job())
is the difference between both blocks printing and neither, 100% of the time across many runs.David W
12/03/2021, 10:10 PMJoffrey
12/03/2021, 10:13 PMDavid W
12/03/2021, 10:14 PMval scope = CoroutineScope(Job()).also { CoroutineScope(Job()) }
val scope2 = CoroutineScope(Job())
scope.launch { println("launch") }
scope.launch { println("launch") }
This doesn't:
val scope = CoroutineScope(Job()).also { CoroutineScope(Job()) }
val scope2 = CoroutineScope(Job())
scope.launch { println("launch") }
scope2.launch { println("launch") }
David W
12/03/2021, 10:14 PMJoffrey
12/03/2021, 10:14 PMDavid W
12/03/2021, 10:15 PMJoffrey
12/03/2021, 10:16 PMDavid W
12/03/2021, 10:16 PMlaunch
on an unused scopeJoffrey
12/03/2021, 10:16 PMDavid W
12/03/2021, 10:18 PMJoffrey
12/03/2021, 10:18 PMval scope = CoroutineScope(Job()).also { CoroutineScope(Job()) }
val scope2 = CoroutineScope(Job())
val job = scope.launch { println("launch") }
val job2 = scope2.launch { println("launch") }
runBlocking {
job.join()
job2.join()
}
But a more idiomatic way of doing this would be to use `runBlocking`:
runBlocking {
launch { println("launch") }
launch { println("launch") }
}
David W
12/03/2021, 10:19 PMDavid W
12/03/2021, 10:20 PMlaunch
in the click handler the first timeDavid W
12/03/2021, 10:20 PM