본문 바로가기

Kotlin/kotlinx.coroutines

awaitCanellation

📌 Kotlin Coroutines에서 awaitCancellation 사용하기

1. 개요

Kotlin의 awaitCancellation 함수는 현재 코루틴이 취소될 때까지 무기한 대기하는 서스펜딩 함수입니다. 이 함수가 호출되면 즉시 CancellationException을 던지며 종료됩니다.

awaitCancellation은 반환값이 없는 Nothing 타입이므로, 어떤 반환 타입을 기대하는 함수에서도 사용할 수 있습니다.

2. 콜백 기반 코드에서 활용

awaitCancellation은 콜백을 사용하는 코드에서 특히 유용합니다. 다음은 callbackFlow 내부에서 센서 데이터를 지속적으로 수신하다가, 코루틴이 취소되면 리소스를 정리하는 예제입니다.


fun currentTemperature(): Flow = callbackFlow {
    val callback = SensorCallback { degreesCelsius: Double ->
        trySend(Temperature.celsius(degreesCelsius))
    }
    try {
        registerSensorCallback(callback)
        awaitCancellation() // 취소될 때까지 대기
    } finally {
        unregisterSensorCallback(callback) // 취소 시 리소스 정리
    }
}

위 코드에서 awaitCancellation()을 호출함으로써, 해당 코루틴이 취소되기 전까지 지속적으로 센서 데이터를 수신할 수 있습니다.

3. UI 관련 코드에서 활용

UI 코드에서도 awaitCancellation을 활용하여, 특정 UI 요소가 코루틴이 취소될 때까지 유지되도록 할 수 있습니다.


suspend fun showStuffUntilCancelled(content: Stuff): Nothing {
    someSubView.text = content.title
    anotherSubView.text = content.description
    someView.visibleInScope {
        awaitCancellation() // 취소될 때까지 UI 유지
    }
}

위 코드에서는 awaitCancellation()을 사용하여 특정 UI가 코루틴이 종료되기 전까지 유지되도록 합니다.

📌 원본 출처

본 문서의 예제와 내용은 Kotlin 공식 문서를 참고하여 작성되었습니다. 자세한 내용은 아래 공식 문서를 통해 확인할 수 있습니다.

🔗 Kotlin Coroutines 공식 문서 - awaitCancellation

'Kotlin > kotlinx.coroutines' 카테고리의 다른 글

cancelAndJoin  (0) 2025.02.07
cancel  (0) 2025.02.07
awaitAll  (0) 2025.02.07
await  (0) 2025.02.07
async  (0) 2025.02.06