在使用 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 可能不会被调用

andrid CoroutineScopelaunch 自定义异常处理

原文地址: https://www.cveoy.top/t/topic/hKKp 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录