MST

星途 面试题库

面试题:Kotlin 协程在复杂业务场景中的应用

假设你需要处理一个包含多个异步操作且相互依赖的业务场景,例如先从网络获取用户信息,再根据用户信息从本地数据库查询相关配置,最后结合两者结果进行复杂计算并展示。请用 Kotlin 协程来实现这个流程,并说明如何处理协程中的异常。
17.0万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试
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}")
    }
}

协程中异常处理说明

  1. try - catch 块:在 runBlocking 中使用 try - catch 块来捕获协程执行过程中抛出的异常。所有在 try 块内的 suspend 函数如果抛出异常,都会被 catch 块捕获。
  2. 异常传播:如果在协程中没有显式处理异常,异常会向上传播到最近的 try - catch 块或导致整个协程崩溃(如果没有处理)。
  3. 特定异常类型处理:可以根据实际情况,在 catch 块中针对不同类型的异常进行不同的处理逻辑,例如网络异常、数据库查询异常等。