Проверяет понимание механизма планировщика корутин и необходимости точек приостановки.
Если в корутине используется бесконечный цикл без suspend-вызовов, она заблокирует поток, в котором выполняется, поскольку не отдаёт управление планировщику. Чтобы корутина оставалась отзывчивой и переключалась, внутри цикла нужно вставлять точки приостановки (delay, yield) или вызывать неблокирующие операции.
Без точек приостановки:
Цикл выполняется непрерывно, корутина не может уступить управление.
Подобно бесконечному while(true) в обычном потоке.
С delay/yield:
delay(100) — приостанавливает корутину на указанный таймаут.
yield() — добровольно уступает место другим корутинам.
Пример:
launch {
while (isActive) {
// работа
delay(100) // точка приостановки, планировщик переключится
}
}Рекомендации:
Всегда проверять isActive.
Использовать flow {} для бесконечных стримов с операторами emit и delay.