BackEnd/coroutine
Coroutine 상태
hanseom
2025. 6. 7. 23:00
반응형
Coroutine 상태
코루틴의 상태를 출력하기 위해서는 Job 객체를 프린트하면 됩니다.
생성
생성 상태의 코루틴을 만들기 위해서는 지연 코루틴을 만들면 됩니다. 다음 코드는 코루틴이 실행 요청되기 전에 출력됐으므로, 생성(New) 상태를 출력합니다.
import kotlinx.coroutines.*
fun main() = runBlocking<Unit> {
val job: Job = launch(start = CoroutineStart.LAZY) {
delay(1000L)
}
println(job)
}
실행 중
다음 코드는 코루틴을 실행하자마자 출력했으므로 실행중(Active) 상태를 출력합니다.
import kotlinx.coroutines.*
fun main() = runBlocking<Unit> {
val job: Job = launch {
delay(1000L)
}
println(job)
}
실행 완료
실행 완료 상태의 코루틴을 만들기 위해서는 join 함수를 호출하면 됩니다. 다음 코드는 코루틴 실행 완료 후 출력했으므로 실행 완료(Completed) 상태를 출력합니다.
import kotlinx.coroutines.*
fun main() = runBlocking<Unit> {
val job: Job = launch {
delay(1000L)
}
job.join() // launch 코루틴이 실행 완료될때까지 일시 중단
println(job)
}
취소 중
취소 중 상태를 만들기 위해서는 취소 확인 시점이 없는 코루틴을 만들고 취소하면 됩니다. 다음 코드는 취소 확인 시점이 없는 코루틴에 취소를 요청했으므로, 취소 중(Cancelling) 상태를 출력합니다.
import kotlinx.coroutines.*
fun main() = runBlocking<Unit> {
val whileJob: Job = launch(Dispatchers.IO) {
while(true){
// 작업 실행
}
}
whileJob.cancel() // 코루틴 취소 요청
println(whileJob)
}
취소 완료
취소 완료 상태를 만들기 위해서는 코루틴 내부에 일시 중단 시점을 만들고, cancelAndJoin 함수를 사용하면 됩니다. 다음 코드는 취소가 완료될 때까지 기다리기에 취소 완료(Cancelled) 상태를 출력합니다.
import kotlinx.coroutines.*
fun main() = runBlocking<Unit> {
val whileJob: Job = launch(Dispatchers.IO) {
while(true){
yield() // 스레드 양보(일시 중단)
}
}
whileJob.cancelAndJoin() // 코루틴 취소 완료될때까지 대기
println(whileJob)
}
Job 객체의 상태 변수
Job 객체는 코루틴을 추상화한 객체여서 코루틴의 상태를 간접적으로 나타내는 세가지 상태 변수를 외부로 공개합니다.
- isActive: 코루틴이 활성화 되어 있는지 여부. 코루틴이 '실행 중' 상태일때 true입니다.
- isCancelled: 코루틴에 취소가 요청됐는지 여부. cancel 함수가 호출되기만 하면 true를 반환하므로, 취소 중인 상태도 포함합니다.
- isCompleted: 코루틴이 완료 되었는지 여부. 코루틴이 실행 완료 되거나 취소 완료되면 true를 반환합니다.
코루틴 상태 | isActive | isCancelled | isCompleted |
생성 | false | false | false |
실행 중 | true | false | false |
실행 완료 | false | false | true |
취소 중 | false | true | false |
취소 완료 | false | true | true |
반응형