在不阻塞第一个函数的情况下调用第二个协程函数

Call second coroutine function without blocking the first function

我有 return 网络调用结果的协程函数。

我希望我的函数 return 结果并以并行方式调用另一个函数,而无需等待第二个函数完成。

这是我的功能

suspend fun getResult() : NetworkResponse<ApiResult, ApiError>?
{
    return withContext(Dispatchers.IO) {
        
        val localData : LocalData? = _localDataSource?.await()
        
        val result : NetworkResponse<ApiResult, ApiError>? = fetchFromNetwork(_localDataSource, localData).getOrNull()
        
        doAdditionalWork(localData, result)
        
        result
    }
}

这是我的第二个功能

private suspend fun doAdditionalWork(localData : LocalData?, apiResponse : NetworkResponse<ApiResult, ApiError>?)
{
    delay(5000)
    //...
}

我只想要函数 1 到 return 结果而不等待函数 2。那我该怎么做呢?

尝试将其包装在 launchasync 块中:

launch { doAdditionalWork(localData, result) }

它将运行并行执行该功能。


其他建议是在getResult()执行后运行doAdditionalWork

someScope.launch {
    val resultPair = getResult()
    launch { doAdditionalWork(resultPair.second, resultPair.first) } // if you want to run it in parallel with the below code if any. 

    // if there are no other code to run in parallel, you can just call `doAdditionalWork(...)` without `launch` block

    // ... some other code if any
}

suspend fun getResult() : Pair<NetworkResponse<ApiResult, ApiError>, LocalData?>
{
    return withContext(Dispatchers.IO) {
        
        val localData : LocalData? = _localDataSource?.await()
        
        val result : NetworkResponse<ApiResult, ApiError>? = fetchFromNetwork(_localDataSource, localData).getOrNull()
                    
        Pair(result, localData)
    }
}