Implement Coroutines Timeout

2024. 5. 29. 20:00·Study/Kotlin
728x90
반응형

이번에는 코루틴에서 타임아웃 기능을 구현해보자.

 

너무 뜬금없이 타임아웃 얘기를 해서 살짝 첨언해보자면,

API request를 보내고 response에 기본 타임아웃이 있듯 타임아웃을 만들어보자는 것이다.

 

따라서 내가 소개할 메소드는 withTimeout, withTimeoutOrNull 총 2가지이다.

 

가장 큰 차이는 예외 발생 여부이다.

(여기서 말하는 예외는 TimeoutCancellationException으로 기타 다른 예외들은 당연히 발생할 수 있다.)

 

코드와 함께 살펴보도록 하자.

 

withTimeout

fun main() = runBlocking {
	try {
		withTimeout(1000L) {
    		// some behaviors
    	}
    } catch(e: TimeoutCancellationException) {
    	e.printStackTrace()
    }
    println("runBlocking ends")
}

withTimeout은 기본적으로 suspend function이기 때문에 특정 코루틴 스코프 안에서 실행되어야 한다.

 

그럼.. 이 녀석의 CoroutineContext는 무엇일까?

 

예제에서는 runBlocking을 실행시킨 Main이 된다.

 

그리고 코드를 보면 try-catch문으로 withTimeout을 감싸두었다.

 

그 이유가 뭘까?

 

withTimeout 파라미터에 전달한 시간 안에

해당 코루틴 작업이 완료되지 않으면 TimeoutCancellationException을 throw한다.

 

따라서 해당 Exception의 여파로 runBlocking이 종료되지 않도록 예제 코드를 작성해보았다.

 

withTimeoutOrNull

반면에 withTimeoutOrNull은 어떨까?

 

먼저 코드를 보자.

fun main() = runBlocking {
	val version = withTimeoutOrNull(1000L) {
    	// some api result
    }
    if (version == null) {
    	println("version is null")
    }
    println("runBlocking ends")
}

곧바로 차이점이 보일 것이다.

 

가장 큰 차이는 try-catch를 사용하지 않았다는 점이다.

 

withTimeoutOrNull은 전달한 시간 내에 코루틴 작업이 완료되지 않으면 null을 리턴한다.

 

나에게 둘 중 하나만 사용하라고 한다면 withTimeoutOrNull을 사용할 것 같다.

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Study > Kotlin' 카테고리의 다른 글

Extract retry logic into higher order function from previous Coroutine  (0) 2024.08.25
Implement Coroutines Retry  (1) 2024.06.05
async CoroutineBuilder Introduction  (0) 2024.05.27
Coroutines의 Main safety  (0) 2024.05.07
Coroutine Builder 이해하기  (0) 2024.05.02
'Study/Kotlin' 카테고리의 다른 글
  • Extract retry logic into higher order function from previous Coroutine
  • Implement Coroutines Retry
  • async CoroutineBuilder Introduction
  • Coroutines의 Main safety
BonusTrack02.dev
BonusTrack02.dev
공부, 일상
  • BonusTrack02.dev
    BonusTrack02.dev
    BonusTrack02.dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (237)
      • Dev experience (85)
        • Android (84)
        • Kotlin (1)
      • Study (62)
        • Kotlin (26)
        • Swift (17)
        • Java (19)
      • 프로그래머스 (68)
      • 주저리주저리 (22)
        • 카페 (5)
        • 음식점 (4)
        • 컨퍼런스 (1)
        • 팝업스토어 (4)
        • 전시회 (1)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바