📌 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 > 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 |