Sobes.tech
Middle

Фарқиятҳои байни launch ва async дар контексти идоракунии хатоҳо чӣ гунаанд?

sobes.tech AI

Ҷавоб аз AI

В 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}")
    }
}