import kotlinx.coroutines.*
import java.lang.Exception
// 模拟从网络获取用户信息
suspend fun fetchUserInfoFromNetwork(): String {
delay(1000) // 模拟网络延迟
return "User Info"
}
// 模拟根据用户信息从本地数据库查询相关配置
suspend fun queryConfigFromLocalDb(userInfo: String): String {
delay(1000) // 模拟查询延迟
return "Config for $userInfo"
}
// 模拟结合两者结果进行复杂计算
suspend fun performComplexCalculation(userInfo: String, config: String): String {
delay(1000) // 模拟计算延迟
return "Calculated result: $userInfo + $config"
}
fun main() = runBlocking {
try {
val userInfo = fetchUserInfoFromNetwork()
val config = queryConfigFromLocalDb(userInfo)
val result = performComplexCalculation(userInfo, config)
println(result)
} catch (e: Exception) {
e.printStackTrace()
// 处理异常,例如显示错误信息给用户
println("An error occurred: ${e.message}")
}
}
协程中异常处理说明
- try - catch 块:在
runBlocking
中使用 try - catch
块来捕获协程执行过程中抛出的异常。所有在 try
块内的 suspend 函数如果抛出异常,都会被 catch
块捕获。
- 异常传播:如果在协程中没有显式处理异常,异常会向上传播到最近的 try - catch 块或导致整个协程崩溃(如果没有处理)。
- 特定异常类型处理:可以根据实际情况,在
catch
块中针对不同类型的异常进行不同的处理逻辑,例如网络异常、数据库查询异常等。