package aicare.net.cn.sdk.ailinksdkdemoandroid.utils

import kotlinx.coroutines.CoroutineExceptionHandler
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.launch
import kotlin.coroutines.cancellation.CancellationException

object CoroutineUtils {

    // 使用 SupervisorJob 确保单个协程失败不影响其他协程
    private val ioScope = CoroutineScope(
        SupervisorJob() +
                Dispatchers.IO +
                CoroutineExceptionHandler { _, throwable ->
                    // 1. 打印详细堆栈
                    throwable.printStackTrace()
                }
    )

    /**
     * 在IO线程池执行协程任务，自动捕获并处理未捕获异常
     *
     * @param block 要执行的协程代码块
     * @return 可用于取消任务的Job对象
     */
    fun coroutineScopeIo(block: suspend CoroutineScope.() -> Unit): Job {
        return ioScope.launch {
            try {
                block() // 正确执行传入的代码块
            } catch (e: CancellationException) {
                // 正常取消不处理
                throw e
            } catch (e: Exception) {
                // 此处捕获协程内部未处理的异常
                // 异常已由CoroutineExceptionHandler处理，此处可添加额外逻辑
                L.e( "内部捕获: ${e.message}")
            }
        }
    }



}