Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktSpCrTm 165 of 299 menu
◀ ▶

Таймаут в Kotlin

Иногда шаг не должен длиться дольше заданного интервала. Функция withTimeout принимает лимит в миллисекундах и выполняет suspend-блок. Если работа уложилась, возвращается результат лямбды. Если нет - бросается TimeoutCancellationException.

Короткий лимит и длинная пауза внутри приводят к срыву по времени:

import kotlinx.coroutines.delay import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withTimeout fun main() { runBlocking { try { withTimeout(50) { delay(200) println("late") } } catch (_: Exception) { println("timeout") } } }

Строка "late" не печатается: delay не успевает завершиться до истечения 50 мс. В catch попадает исключение таймаута.

При достаточном лимите блок доходит до конца и возвращает значение, как обычная лямбда:

import kotlinx.coroutines.delay import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withTimeout fun main() { runBlocking { val code = withTimeout(500) { delay(20) "OK" } println(code) } }

Оберните паузу на 300 миллисекунд в лимит 100 мс. Поймайте сбой и выведите "slow".

В лимите 200 мс верните строку "fast" после короткой паузы. Напечатайте полученное значение.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить