Как перенести задержку в корутину Kotlin без блокировки?

Используйте suspend main и delay(1000): delay приостанавливает корутину, а не удерживает поток в блокирующем ожидании. Вывод будет start, затем done.

Короткий ответ

Что ответить на собеседовании

Используйте 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.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее