Что выведет код Senior Корутины и structured concurrency обновлено
Отмена корутины и finally
Вопрос
Что выведет код? По строке на каждый вывод.
import kotlinx.coroutines.*
fun main() = runBlocking {
val job = launch {
try {
repeat(10) { i ->
println("tick $i")
delay(100)
}
} finally {
println("cleanup")
}
}
delay(250)
job.cancelAndJoin()
println("cancelled=${job.isCancelled}")
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: tick 0, tick 1, tick 2, cleanup, cancelled=true. За 250 мс корутина успевает напечатать tick 0, tick 1 и tick 2 (моменты 0, 100, 200 мс). cancel прерывает её на очередном delay исключением CancellationException, выполняется finally. cancelAndJoin дожидается завершения, после чего…
Что выведет
tick 0
tick 1
tick 2
cleanup
cancelled=true
Разбор
За 250 мс корутина успевает напечатать tick 0, tick 1 и tick 2 (моменты 0, 100, 200 мс). cancel прерывает её на очередном delay исключением CancellationException, выполняется finally. cancelAndJoin дожидается завершения, после чего isCancelled равен true.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.