В чем разница между CoroutineScope(dispatchers).launch{}
и coroutineScope{ launch{}}
?
Допустим, у меня есть код ниже:
(вы можете go до Kotlin площадка для запуска этого фрагмента https://pl.kotl.in/U4eDY4uJt)
suspend fun perform(invokeAfterDelay: suspend () -> Unit) {
// not printing
CoroutineScope(Dispatchers.Default).launch {
delay(1000)
invokeAfterDelay()
}
// will print
coroutineScope {
launch {
delay(1000)
invokeAfterDelay()
}
}
}
fun printSomething() {
println("Counter")
}
fun main() {
runBlocking {
perform {
printSomething()
}
}
}
И, как отмечается в комментарии, при использовании CoroutineScope().launch
он не будет вызывать печать, однако при использовании другого способа код работает так, как задумано.
В чем разница?
Спасибо.
Дополнительный вопрос
Новые результаты.
если я оставлю функцию perform
как это (без комментирования одной из сопрограмм)
suspend fun perform(invokeAfterDelay: suspend () -> Unit) {
CoroutineScope(Dispatchers.Default).launch {
delay(1000)
invokeAfterDelay()
}
coroutineScope {
launch {
delay(1000)
invokeAfterDelay()
}
}
}
, тогда обе эти сопрограммы будут выполнены ?Почему?