У меня есть следующий код, использующий Coroutine для выполнения сетевой выборки на фоне
try {
networkJob = CoroutineScope(Dispatchers.IO).launch {
val result = fetchOnBackground(searchText)
withContext(Dispatchers.Main) {
showResult("Count is $result")
}
}
} catch (exception: Throwable) {
showResult(exception.localizedMessage)
}
Когда сеть есть, все хорошо. Однако, когда хост неверен или отсутствует сеть, происходит сбой. catch
не может поймать его.
Когда я пишу код с использованием RxJava
disposable = Single.just(searchText)
.map{fetchOnBackground(it)}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{ showResult("Count is $it") },
{ showResult(it.localizedMessage) })
Все отлично работает. Даже в ситуации отсутствия сети ошибка перехватывается в обратном вызове ошибки.
Что я упустил в коде сопрограммы, что я не могу уловить ошибку на своем конце при использовании сопрограммы?
Примечание: при загрузке по сети используется OkHttp.