【问题标题】:How to reuse Kotlin coroutine after error handling?错误处理后如何重用 Kotlin 协程?
【发布时间】:2019-03-25 17:11:39
【问题描述】:

错误处理后如何重用协程? 在我的代码中,当协程(使用 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)
            }
        }

【问题讨论】:

    标签: android kotlin kotlin-coroutines


    【解决方案1】:

    重新创建作业看起来不是最佳选择。您可以使用launch{..}async{..} 函数启动新的协程,并使用普通的try/catch 块处理异常。如果这还不够 - supervisorScope{..} 可以帮助确保父作业不会被终止。

    您可以查看文档了解更多详细信息
    https://kotlinlang.org/docs/reference/coroutines/exception-handling.html

    【讨论】:

      猜你喜欢
      • 2019-06-02
      • 2020-09-25
      • 1970-01-01
      • 2020-01-10
      • 2019-12-10
      • 1970-01-01
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      相关资源
      最近更新 更多