시배's Android
Kotlin Coroutines Deep Dive | 3장. 중단은 어떻게 작동할까? 본문
Book/Kotlin Coroutines Deep Dive
Kotlin Coroutines Deep Dive | 3장. 중단은 어떻게 작동할까?
si8ae 2024. 1. 18. 21:14중단
- 코루틴은 중단되었을 때 Continuation 객체를 반환합니다.
- Continuation을 이용하면 멈췄던 곳에서 다시 코루틴을 실행할 수 있습니다.
- 스레드는 저장이 불가능하고 멈추는 것만 가능합니다.
- 코루틴은 다른 스레드에서 시작할 수 있고, 컨티뉴에이션 객체는 (이론상) 직렬화와 역직렬화가 가능하며 다시 실행될 수 있습니다.
재개
- 중단 함수는 말 그대로 코루틴을 중단할 수 있는 함수입니다. 이는 중단 함수가 반드시 코루틴(또는 다른 중단 함수)에 의해 호출되어야 함을 의미합니다.
- ScheduledExecutorService를 통해 특정 시간 이후에 중단을 멈추고 재개할 수 있도록 할 수 있습니다.
private val executor =
Executors.newSingleThreadScheduledExecutor {
Thread(it, "scheduler").apply { isDaemon = true }
}
suspend fun main() {
println("Before")
suspendCoroutine<Unit> { continuation ->
executor.schedule({
continuation.resume(Unit)
}, 1000, TimeUnit.MILLISECONDS)
}
println("After")
}
- delay가 구현된 방식이랑 정확히 일치합니다.
- suspendCoroutine을 호출할 때 컨티뉴에이션 객체로 반환될 값의 타입을 지정할 수 있습니다.
- resume을 통해 반환되는 값은 반드시 지정된 타입과 같은 타입이어야 합니다.
- 코루틴이 있으면 중단함과 동시에 데이터를 받고 나면, 받은 데이터를 resume 함수를 통해 보내줘라고 컨티뉴에이션 객체를 통해 라이브러리에 전달할 수 있습니다.
'Book > Kotlin Coroutines Deep Dive' 카테고리의 다른 글
Kotlin Coroutines Deep Dive | 6장. 코루틴 빌더 (0) | 2024.01.21 |
---|---|
Kotlin Coroutines Deep Dive | 5장. 언어차원에서의 지원 vs 라이브러리 (0) | 2024.01.19 |
Kotlin Coroutines Deep Dive | 4장. 코루틴의 실제 구현 (0) | 2024.01.18 |
Kotlin Coroutines Deep Dive | 2장. 시퀀스 빌더 (0) | 2024.01.15 |
Kotlin Coroutines Deep Dive | 1장. 코틀린 코루틴을 배워야 하는 이유 (0) | 2024.01.15 |