Qual é a diferença entre runBlocking e coroutineScope em Kotlin Coroutines?
Olá, colegas! Comecei a estudar coroutines em Kotlin e me deparei com duas funções que me parecem muito semelhantes: runBlocking e coroutineScope. Li a documentação, mas para mim o comportamento delas ainda não está claro.
Aqui está um exemplo que escrevi:
fun main() = runBlocking {
launch {
delay(1000L)
println("World!")
}
println("Hello,")
}
E outro:
fun main() = runBlocking {
coroutineScope {
launch {
delay(1000L)
println("World!")
}
println("Hello,")
}
}
Ambos os exemplos imprimem primeiro "Hello," e, após um segundo, "World!". Mas suspeito que haja uma diferença, e que ela é importante. Em que consiste?
Especificamente, tenho interesse em:
- Por que
runBlockingbloqueia a thread atual, enquantocoroutineScopenão? - Como essas funções se comportam em rea