【问题标题】:Launch coroutine in try catch block crashes在 try catch 块崩溃中启动协程
【发布时间】:2022-01-13 23:01:52
【问题描述】:

我无法理解这两个函数之间的区别。为什么 func2 会导致程序崩溃,而 func1 可以捕获异常?

fun main() {
    runBlocking {
        func1() //Prints exception
        func2() //Program crashes
    }
}

fun CoroutineScope.func1() {
    launch {
        try {
            throw IllegalArgumentException("error")
        } catch (t: Throwable) {
            println(t)
        }
    }
}

fun CoroutineScope.func2() {
    try {
        launch {
            throw IllegalArgumentException("error")
        }
    } catch (t: Throwable) {
        println(t)
    }
}

【问题讨论】:

    标签: kotlin try-catch kotlin-coroutines


    【解决方案1】:

    “启动”块中的代码在具有不同上下文的单独协程上运行。外部 try/catch 无法捕获发生的异常。您需要将 try/catch 放在一个块中,例如您的 func1。

    【讨论】:

    • 那么,try catch 块会捕获自己线程的异常吗?
    • @toffor 是的,你可以这么说!
    • 谢谢!这是有道理的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    相关资源
    最近更新 更多