Экспериментируя с ktor, я попытался сделать следующее:
fun main() {
embeddedServer(Netty, port = 8080) {
routing {
get("/") {
call.respondTextWriter(ContentType.Text.Html) {
appendHTML().html {
head {}
body {
pre {
(1..10).forEach {
text("counting: $it\n")
flush()
// delay(1000) <- I wish...
Thread.sleep(50) // that works
}
}
}
}
}
}
}
}.start()
}
К сожалению, библиотека kotlinx.html не может быть приостановлена. Вызов метода delay не компилируется с этой ошибкой: функции приостановки могут вызываться только внутри тела сопрограммы.
Все это согласно документации и имеет смысл. Хотя было бы здорово, если бы это было возможно.
Одним из возможных решений будет инструмент, который преобразует библиотеку в CPS на уровне байт-кода. Существует ли такой инструмент?