Sobes.tech
Middle

Koje su razlike između launch i async u kontekstu obrade grešaka?

sobes.tech АИ

Одговор од АИ

У launch грешке се директно шире на родитељски контекст корутине, што доводи до пада апликације ако нису обрађене. У async, грешке се одлажу и јављају се само при позиву .await().

На пример:

fun main() = runBlocking {
    // launch: грешка доводи до пада scope-а
    val job = launch {
        throw IllegalStateException("Грешка у launch")
    }
    job.join() // Чека на завршетак job-а, у случају грешке, job ће бити отказан

    // async: грешка се одлаже до await
    val deferred = async {
        throw IllegalStateException("Грешка у async")
        "Резултат" // Овај код се неће извршити
    }
    try {
        deferred.await() // Овде ће бити подигнута одложена грешка
    } catch (e: IllegalStateException) {
        println("Обрађена грешка: ${e.message}")
    }
}