Используйте suspend main и delay(1000): delay приостанавливает корутину, а не удерживает поток в блокирующем ожидании. Вывод будет start, затем done.
Как перенести задержку в корутину Kotlin без блокировки?
Используйте suspend main и delay(1000): delay приостанавливает корутину, а не удерживает поток в блокирующем ожидании. Вывод будет start, затем done.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В консольной программе Kotlin с kotlinx.coroutines нужно вывести start, подождать одну секунду, вывести done и завершиться. Ожидание не должно блокировать поток через Thread.sleep. Покажите минимальную программу со структурированной корутиной.
Ответ
Используйте suspend main и delay(1000): delay приостанавливает корутину, а не удерживает поток в блокирующем ожидании. Вывод будет start, затем done.
import kotlinx.coroutines.delay
suspend fun main() {
println("start")
delay(1000)
println("done")
}
Для такого последовательного сценария launch не нужен. Если требуется параллельная дочерняя работа, её запускают внутри coroutineScope и ожидают в рамках его жизненного цикла. Неблокирующая задержка не превращает обычное тяжёлое вычисление в фоновое: для него отдельно выбирают подходящий dispatcher.
Источник: kotlinlang.org.