Что будет после вызова await у отмененной корутины запущенной с помощью async

«Что будет после вызова await у отмененной корутины запущенной с помощью async» — вопрос из категории Coroutines и Flow, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При вызове await у отмененной корутины, запущенной через async, будет выброшено исключение CancellationException. Это происходит потому, что отмена корутины прерывает её выполнение и завершает с исключением.

Пример:

val deferred = CoroutineScope(Dispatchers.IO).async {
    delay(1000)
    "Result"
}
deferred.cancel()  
try {
    deferred.await() // Выбросит CancellationException
} catch (e: CancellationException) {
    println("Coroutine was cancelled")  
}

Если корутина уже завершилась до отмены, await() вернёт её результат.