在 try catch 块崩溃时启动协程
Launch coroutine in try catch block crashes
我无法理解这两个函数之间的区别。为什么 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)
}
}
“启动”块中的代码在具有不同上下文的单独协程上运行。外部 try/catch 无法捕获发生的异常。你需要在一个块中有 try/catch,就像你的 func1.
我无法理解这两个函数之间的区别。为什么 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)
}
}
“启动”块中的代码在具有不同上下文的单独协程上运行。外部 try/catch 无法捕获发生的异常。你需要在一个块中有 try/catch,就像你的 func1.