andrid CoroutineScopelaunch 自定义异常处理
在使用 CoroutineScope.launch 启动协程时,可以使用 try-catch 块来捕获和处理异常。以下是一个示例:
import kotlinx.coroutines.CoroutineExceptionHandler
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
fun main() {
val exceptionHandler = CoroutineExceptionHandler { _, throwable ->
println("Coroutine exception caught: $throwable")
}
val coroutineScope = CoroutineScope(exceptionHandler)
coroutineScope.launch {
try {
// 在这里执行协程的逻辑代码
throw CustomException("Something went wrong")
} catch (e: Exception) {
println("Caught exception: $e")
}
}
}
class CustomException(message: String) : Exception(message)
在上面的示例中,我们首先创建了一个 CoroutineExceptionHandler,它会在协程抛出异常时被调用。然后,我们将这个异常处理器传递给 CoroutineScope 的构造函数来创建一个协程作用域。
在 launch 函数中,我们使用 try-catch 块来捕获协程中可能抛出的异常。在 try 块中,我们抛出了一个自定义的异常 CustomException。在 catch 块中,我们捕获并处理了这个异常。
运行上面的代码将输出:
Coroutine exception caught: CustomException: Something went wrong
Caught exception: CustomException: Something went wrong
请注意,CoroutineExceptionHandler 会在协程内部没有捕获异常的情况下才被调用。如果协程内部已经有了自己的异常处理逻辑,那么 CoroutineExceptionHandler 可能不会被调用
原文地址: https://www.cveoy.top/t/topic/hKKp 著作权归作者所有。请勿转载和采集!