Почему Thread.sleep нельзя использовать на корутинах

Ответ

Thread.sleep() блокирует текущий поток, что противоречит концепции корутин, которые должны быть неблокирующими. Вместо этого в корутинах используется delay() из kotlinx.coroutines, который приостанавливает корутину без блокировки потока, позволяя другим корутинам работать.

Пример:

suspend fun doWork() {
    delay(1000) // Не блокирует поток
    // Thread.sleep(1000) <- Так делать нельзя!
}

delay() - suspend-функция, которая может быть вызвана только из корутины или другой suspend-функции. Она освобождает поток для выполнения других задач во время ожидания.

Ответ 18+ 🔞

Ага, слушай, вот тут часто народ путается, как будто на дворе 2002-й год. Смотри, Thread.sleep() — это такая старая, блядовитая штука, которая просто тупо блокирует поток, в котором сидит. Представь, ты встал посреди узкого коридора и уснул, ёпта. Все остальные корутины, которым нужно по этому потоку пробежать, будут тебя обходить, пиздец как злые. Это полная противоположность тому, как должны работать корутины — они же по идее неблокирующие, хитрая жопа, должны уметь приостанавливаться, освобождая дорогу другим.

Вот поэтому в корутинах есть своя родная приблуда — delay() из kotlinx.coroutines. Эта штука не блокирует, а именно приостанавливает корутину. Это как если бы ты отошёл в сторонку, сказал "буду через секунду" и дал другим спокойно работать. Поток-то освобождается, овердохуища других задач могут в это время выполняться.

Смотри на пример, тут всё просто:

suspend fun doWork() {
    delay(1000) // Всё чётко, корутина приостановилась, поток свободен
    // Thread.sleep(1000) <- Вот так делать — это прям пидарас шерстяной! Заблокируешь всё нахер!
}

И главное, delay() — это suspend-функция. Её, блядь, вызвать можно только из другой suspend-функции или корутины. Не из любого места ткнуть, понимаешь? Она умная, она кооперативная. А Thread.sleep() — тот ещё распиздяй, впендюрится куда угодно и всё сломает. Запомни раз и навсегда: в корутинах спим только через delay(), иначе будет вам хиросима и нигерсраки в асинхронности.