Implement Coroutines Retry

2024. 6. 5. 00:15·Language/Kotlin
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
'Language/Kotlin' 카테고리의 다른 글
  • Coroutines on Main Thread(위험성에 대해 인지하기)
  • Extract retry logic into higher order function from previous Coroutine
  • Implement Coroutines Timeout
  • async CoroutineBuilder Introduction
BonusTrack02.dev
BonusTrack02.dev
공부, 일상
  • BonusTrack02.dev
    BonusTrack02.dev
    BonusTrack02.dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (237)
      • Android (84)
      • Language (63)
        • Java (19)
        • Kotlin (27)
        • Swift (17)
      • 프로그래머스 (68)
      • 주저리주저리 (22)
        • 카페 (5)
        • 음식점 (4)
        • 컨퍼런스 (1)
        • 팝업스토어 (4)
        • 해외여행 (0)
        • 전시회 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    programmers
    Observer
    코틀린
    배열
    프로그래머스
    MVVM
    jetpack
    안드로이드
    오블완
    SWIFT
    coroutines
    코루틴
    Java
    자바
    Material
    viewModelScope
    getNumericValue
    android
    room
    티스토리챌린지
    PCCE
    CodeLab
    databinding
    ios
    aac
    Kotlin
    스위프트
    ViewModel
    LiveData
    daterangepicker
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
BonusTrack02.dev
Implement Coroutines Retry
상단으로

티스토리툴바