Это происходит из-за типов возврата.
main
функция должна возвращать Unit
тип.
В Kotlin
Мы можем явно вернуть значениеиз лямбда с использованием квалифицированного синтаксиса возврата. В противном случае неявно возвращается значение последнего выражения.
См. Возвращение значения из лямбда-выражения
Если при вызове delay
удален тип возвращаемой внешней лямбды (runBlocking
), изменился на Job
(launch
возвращаемое значение функции) и main
также возвращает Job
.
То есть он не запускается
fun main() = runBlocking {
GlobalScope.launch {
repeat(1000) {i->
println("I'm sleeping $i ...")
delay(500)
}
}
delay(1300) // returns Unit, runBlocking also returns Unit and so does main
}
С удалением delay
:
fun main() = runBlocking {
GlobalScope.launch {
repeat(1000) {i->
println("I'm sleeping $i ...")
delay(500)
}
} // returns Job, runBlocking also returns Job and so does main
}