Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Kotlin: coroutine, infinite loop, delay, yield, scheduling

Как корутины ведут себя при использовании бесконечного цикла (например, while(true))?

Проверяет понимание механизма планировщика корутин и необходимости точек приостановки.

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

Если в корутине используется бесконечный цикл без suspend-вызовов, она заблокирует поток, в котором выполняется, поскольку не отдаёт управление планировщику. Чтобы корутина оставалась отзывчивой и переключалась, внутри цикла нужно вставлять точки приостановки (delay, yield) или вызывать неблокирующие операции.

Длинный ответ

Без точек приостановки:

  • Цикл выполняется непрерывно, корутина не может уступить управление.

  • Подобно бесконечному while(true) в обычном потоке.

С delay/yield:

  • delay(100) — приостанавливает корутину на указанный таймаут.

  • yield() — добровольно уступает место другим корутинам.

Пример:

launch {
    	while (isActive) {
        	// работа
        	delay(100)       // точка приостановки, планировщик переключится
    	}
}

Рекомендации:

  • Всегда проверять isActive.

  • Использовать flow {} для бесконечных стримов с операторами emit и delay.

  • Аватар

    Android Guru

    Anton Gulyaev

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    2

  • Сложность:

    6

Навыки

  • Kotlin

    Kotlin

Ключевые слова

#coroutine

#infinite loop

#delay

#yield

#scheduling

Подпишись на Android Developer в телеграм

  • Аватар

    Android Guru

    Anton Gulyaev

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.