Как повторно использовать сопрограмму Kotlin после обработки ошибок? - PullRequest
0 голосов
/ 25 марта 2019

Как повторно использовать сопрограмму после обработки ошибок? В моем коде я воссоздаю новый экземпляр задания и области действия, когда любая ошибка в сопрограмме (с использованием 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)
            }
        }

1 Ответ

1 голос
/ 26 марта 2019

Повторное создание вакансии не выглядит лучшим выбором.Вы можете запустить новую сопрограмму с функциями launch{..} или async{..} и обрабатывать исключения с помощью обычных блоков try/catch.Если этого недостаточно - supervisorScope{..} может помочь убедиться, что родительское задание не прекращено.

Более подробную информацию вы можете получить в документации
https://kotlinlang.org/docs/reference/coroutines/exception-handling.html

...