错误处理后如何重用协程?在我的代码中,当协程上出现任何错误(使用 CoroutineExceptionHandler(时,我会重新创建一个新的作业和范围实例,它有效,购买我认为这不是一个好的选择,也许有另一种选择
fun getDashBoardData() {
loadingStateLiveData.value = true
scope.launch(scope.coroutineContext + CoroutineExceptionHandler { _, e ->
assetsBalanceLiveData.postValue(Resource.error(app.getString(R.string.no_connection), null))
Log.e(TAG, "CoroutineExceptionHandler - ${e.message}")
job = Job()
scope = CoroutineScope(Dispatchers.Default + job)
loadingStateLiveData.postValue(false)
}) {
// SUSPENDED FUN
assetsBalanceLiveData.postValue(DashboardRepository.getUserAssetsBalance())
// SUSPENDED FUN
incomeGraphDataLiveData.postValue(DashboardRepository.getIncomeGraphData())
loadingStateLiveData.postValue(false)
}
}
重新创建作业看起来不是最佳选择。您可以使用launch{..}
或async{..}
函数启动新的协程,并使用普通try/catch
块处理异常。如果这还不够 - supervisorScope{..}
可以帮助确保父作业不会终止。
您可以查看文档以获取更多详细信息
https://kotlinlang.org/docs/reference/coroutines/exception-handling.html