Допустим, я хочу написать функцию, которая проверяет некоторый результат асинхронного процесса по некоторому условию, которое должно быть выполнено. Эта функция должна использовать некоторое максимальное время ожидания, время ожидания цикла и должна повторяться, пока не будет выполнено условие.
Смесь кода и псевдокода выглядит следующим образом:
fun waitUntilConditionIsMatched() {
val maximumWaitTime = Duration.ofSeconds(10L)
val maximum = currentTimeMillis() + maximumWaitTime.toMillis()
println("Waiting for maximum of $maximumWaitTime for a condition to be matched...")
while (currentTimeMillis() <= maximum) {
if (conditionIsMatched) {
println("...condition matched")
break
} else {
doWait(Duration.ofMillis(500))
}
}
println("...timeout exceeded. Condition was not matched.")
}
Есть ли идиоматический способ, как написать это на Kotlin?