android kotlin 协程中如何再异步执行另一个协程

需求是这样的:我需要先调用在线接口获取数据,拿到数据后调用缓存接口缓存数据,并将在线数据返回到UI。缓存接口调用结果不管是失败还是抛异常,不影响正常流程

试着在协程中开启协程,在withContext(Dispatchers.IO)中执行下面代码

            runBlocking {
                val data = onlineMethod()
                if (data.result) {
                    async(Dispatchers.Default) {
                        try {
                            cacheMethod()
                        } catch (e: Exception) {
                            NetExceptionHandle.handleException(e)
                        }
                    }
                }
                data
            }

不知道哪里写的有问题吗,如果cacheMethod()抛异常的话会被阻塞住,等到cacheMethod处理完才会返回data。换成线程则可以,如下面代码,会先返回data,cacheMethod会异步处理,不会阻塞在cacheMethod方法上

            runBlocking {
                val data = onlineMethod()
                if (data.result) {
                    ThreadFactory.instance()?.getFixThreadPool()?.execute {
                        try {
                            runBlocking {
                                cacheMethod()
                            }
                        } catch (e: Exception) {
                            NetExceptionHandle.handleException(e)
                        }
                    }
                }
                data
            }

请问我该怎么只用协程实现上面的效果?



  // onlineMethod 接口要用 suspend 关键字
    //提供一个返回成功 、失败回调:例如
    
    var  success:(String)->Unit={}
    var  error:(Throwable)->Unit={}
    viewModelScope.launch {
        kotlin.runCatching {
            withContext(Dispatchers.IO) {
                onlineMethod()
            }
        }.onSuccess {
            if (data.result){
                cacheMethod()
                //缓存 同时响应结果数据
                success("结果数据,也就是 data")
            }
            else {
//                错误
                error(Throwable("接口返回错误信息"))
            }
        }.onFailure {
            //异常处理
            error(Throwable("异常信息"))
        }
    }