Ответ
В Kotlin есть несколько способов проверки завершения корутины:
- isActive - проверяет, активна ли корутина (не отменена и не завершена)
if (coroutineContext.isActive) {
// корутина ещё работает
}
- Job.join() - приостанавливает вызывающую корутину до завершения целевой
val job = launch {
// работа корутины
}
job.join() // ждём завершения
- Job.isCompleted - возвращает Boolean, завершена ли корутина
if (job.isCompleted) {
// обработка завершения
}
- Deferred.await() - для корутин с результатом (async/await)
val deferred = async { computeSomething() }
val result = deferred.await() // ждём результат
- invokeOnCompletion - колбэк при завершении
job.invokeOnCompletion { cause ->
cause?.let {
// обработка ошибки
}
}