Ну, в общем, сопрограммы намного лучше, чем потоки обработчиков, и всякий раз, когда вы используете обработчики, он выполняет ваш исполняемый файл в основном потоке пользовательского интерфейса после выполнения метода post delay, однако, приписывая сопрограммам, вы всегда можете указать задержку в различных контекстах, например, при запуске {} используется, он выполняет вашу сопрограмму в потоке пользовательского интерфейса или, если вам нужна задержка в фоновом режиме, вы можете использовать aync {}.
Более того, обработчики ограничены выполнением требуемого кода в исполняемом модуле и после пост-задержки, если вы хотитечтобы возобновить работу с точки останова, вы не можете сделать это легко.
Так что сопрограммы в основном облегчают этот процесс для нас, когда, если вы вызываете задержку, он приостанавливает или отклоняет ваш метод на определенное время, а затемвернуться с того места, где произошла задержка.
Чтобы быть более конкретным, взгляните на это, например: -
suspend fun myfunc(){
print("Hello") //prints a hello
delay(300) //this line suspends your function for 300 milliseconds
print("World") //when delay is over world will be printed
}