delay
приостанавливает и не блокирует.
TL; DR: delay
действительно имеет эффект ожидания перед выполнением оператора, следующего за ним в текущей сопрограмме. Неблокирование просто означает, что во время этого ожидания текущий поток может делать что-то еще.
В документации Kotlin часто говорится о неблокировании для приостановки функций, чтобы было ясно, что они не блокируют текущий поток, а вместо этого просто приостанавливают текущую сопрограмму.
Иногда это может вводить в заблуждение, потому что неблокирование делает акцент на том факте, что ничего не заблокировано, в то же время следует четко указать, что приостанавливающие функции действительно приостанавливают текущую сопрограмму (так что по крайней мере что-то как бы заблокировано , даже если сам поток продолжает работать).
Тот факт, что они приостанавливают текущую сопрограмму, делает эти функции синхронными с точки зрения текущей сопрограммы, потому что сопрограмме необходимо дождаться завершения этих функций перед выполнением остальной части кода. Однако они фактически не блокируют текущий поток, потому что их реализация использует скрытые асинхронные механизмы.
person
Joffrey
schedule
24.03.2019
Thread.sleep
(поэтому он не блокирует), он просто приостанавливает сопрограмма. Выполнение текущей сопрограммы приостанавливается до тех пор, пока не будет достигнута точка приостановки. Сопрограммы - это не то же самое, что потоки, и документация должным образом не рассматривает их как таковые, даже если конечный результат аналогичен. - person Moira   schedule 26.03.2019