在不阻塞第一个函数的情况下调用第二个协程函数
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。那我该怎么做呢?
尝试将其包装在 launch
或 async
块中:
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)
}
}
我有 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。那我该怎么做呢?
尝试将其包装在 launch
或 async
块中:
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)
}
}