Я только начал использовать сопрограммы для 2 асинхронных c вызовов, которые выполняются параллельно. Одна из задач ayn c выполняет сервисный вызов. Эта услуга иногда может занять много времени, чтобы ответить. В этом случае мой код вызывает сбой в моей функции Interceptor, введенной кинжалом. Я пытался поймать ошибку и выбросить ее обратно в мою сопрограмму, но ее так и не поймали.
Сопрограмма:
try {
CoroutineScope(Dispatchers.IO).launch {
val deferredList = listOf(async {
myAPI?.getAllMarks(WebService.getAwsAccessToken(),
UserInfoManager?.userInfo?.guid)
}, async {
getClassFromJsonFile(R.raw.temp_whatsnew, WhatsNew::class.java)
})
var theList: List<Any> =
deferredList.awaitAll() // wait for all data to be processed without blocking the UI thread
withContext(Dispatchers.Main) {
mListener?.onWhatsNewDownloaded(theList.get(1) as WhatsNew,
theList.get(0) as List<Coachmark>)
}
}
} catch (t: Throwable) {
//exception never reaches here!
Log.v(WhatsNewInteractorImpl::class.java.simpleName, t.localizedMessage)
}
Перехватчик:
try {
response = chain.proceed(newRequest);
} catch (SocketTimeoutException e) {
//CRASHES HERE!
throw new SocketTimeoutException("socket timeout");
}