728x90
반응형
이번에는 코루틴으로 재시도하는 동작을 구현해보려한다.
주로 "API 요청을 보내고 정상적인 응답이 오지 않으면 최대 n회 재시도한다" 같은 시나리오에 유용하게 사용할 수 있다.
샘플 코드와 함께 살펴보자.
viewModelScope.launch {
val retryNumber = 2
try {
repeat(retryNumber) {
try {
loadRecentVersion()
return@launch
} catch (e: Exception) {
e.printStackTrace()
}
}
loadRecentVersion()
} catch(outerException: Exception) {
outerException.printStackTrace()
// show error in UI
}
}
try-catch 안에서 API 요청을 2번까지 재시도한다.
만약 정상 응답이 오게되면 repeat 블럭 안 try-catch에서 return@launch 구문이 실행된다.
하지만 2번 모두 비정상 응답이 오는 경우, repeat 외부의 API 요청을 다시 보낸다.
굳이 repeat 횟수를 -1하는 이유
처음에 강의를 들으면서 이 코드가 되게 이상하다고 생각했다.
그 이유는 어차피 3번까지 API 요청을 시도할 거라면 repeat 블럭에서 3번돌면 되는거 아닌가?
하지만, loadRecentVersion()에서 문제가 생기면 Exception을 throw할텐데
이를 모두 catch 문에서 UI에 error를 노출하도록 구현하는 순간 아주 끔찍한 상황이 생길 것이다.
그래서 총 3번 시도한다면 2번은 repeat 블럭에서 실행하고,
마지막 한번은 repeat 외부에서 실행하여 UI에 에러를 보여주도록 처리했다.
728x90
반응형
'Language > Kotlin' 카테고리의 다른 글
Coroutines on Main Thread(위험성에 대해 인지하기) (0) | 2024.09.03 |
---|---|
Extract retry logic into higher order function from previous Coroutine (0) | 2024.08.25 |
Implement Coroutines Timeout (0) | 2024.05.29 |
async CoroutineBuilder Introduction (0) | 2024.05.27 |
Coroutines 기본적인 에러 처리하기(feat. try-catch) (0) | 2024.05.08 |