Can someone enlighten me about what is going on in this code example:
import kotlinx.coroutines.*
import kotlin.time.*
fun subTask(scope: CoroutineScope): Job {
val job = scope.launch(Dispatchers.IO){
println("SubTask started.")
delay(500L)
println("SubTask ending.")
}
job.invokeOnCompletion(object: CompletionHandler{
override fun invoke(cause: Throwable?) {
println("SubTask completed.")
}
})
return job
}
fun main() {
val duration = measureTime {
runBlocking {
val job = withContext(Dispatchers.IO) {
subTask(this)
}
println("Waiting for SubTask")
job.join()
}
}
println("Duration: $duration")
}
(Click here for Kotlin playground)
I was expecting to see
SubTask started.
Waiting for SubTask
SubTask ending.
SubTask completed.
Duration: 600ms
But I am getting
SubTask started.
SubTask ending.
SubTask completed.
Waiting for SubTask
Duration: 600ms
Why isn't the subTask run in parallel with main()?