Бросить исключение в viewModelScope, но поймать его

Итак, у меня есть SharedFlow, который в определенном случае что-то испускает. В другой момент у меня есть блок try-catch, и я хочу пропустить дальнейшее выполнение блока try, только если Flow что-то собирает во время выполнения. В то же время я не хочу блокировать поток при сборе. Если ничего не происходит, я хочу, чтобы блок try выполнялся нормально. Итак, это была моя первая идея:

      try {
    viewModelScope.launch {
        mySharedFlow.collect { throw myException }
    }
    skipThisIfExceptionWasThrown()
} catch (e: myException) {
    doStuff()
}

Используя это, приложение вылетает, если запускается выполнение, оно не перехватывается. Из того, что я читал при поиске решений, похоже, что вы можете поймать исключение только в той же сопрограмме. Но это не позволит мне пропустить дальнейшее выполнение после viewModelScope. Я много чего пробовал, но в итоге всегда получал

  1. ловить исключение внутри и не пропускать дальнейшее выполнение
  2. ожидание результата, который, если он не сгенерирован, никогда не приходит, блокируя дальнейшее выполнение
  3. не улавливает исключение, что приводит к сбою приложения

Любые идеи, предложения или альтернативные решения этой проблемы будут очень приветствоваться, заранее спасибо.

0 ответов

Другие вопросы по тегам