首页 > 解决方案 > 使用协程处理异常

问题描述

我试图了解协程上的 try catch 机制并对它的行为感到好奇。

这是一段代码显示

val job: Job = Job()
val scope = CoroutineScope(Dispatchers.Default + job)
scope.funTryCatch()

fun CoroutineScope.funThrowException(): Deferred<String> = async {
    error("Throw exception")
}

fun CoroutineScope.funTryCatch() = launch {
    try {
        funThrowException().await()                               
    } catch (e: Exception) {
        println("Exception: $e")
    }
}

我期望在应用程序和控制台日志中不会发生崩溃并打印“抛出异常”消息,

但即使控制台日志打印“抛出异常”消息,上面的代码也会导致崩溃。

我对这种行为感到困惑,因为异常被捕获,这个异常如何使应用程序崩溃?

有谁可以帮我弄清楚这种情况?谢谢!

标签: kotlinkotlin-coroutines

解决方案


推荐阅读