본문 바로가기

코루틴

코루틴의 다양한 상태값들

 

코루틴에는 다양한 상태값들이 존재한다. 아래 그림을 참고하자.

 

각 상태를 코드로 확인해보자.

import kotlinx.coroutines.*
fun main() = runBlocking<Unit> {
    val job : Job = launch {
        delay(1000L)
    }

    // toString 메소드로 job의 상태값을 확인하면 JobSupport 객체에서 디버깅 용도로 만드는 문자열(toDebugString())을 사용하는 것이라서 직접 코드에서 사용하기는 어렵다.
    println(job)
    printJobState(job)
}

fun printJobState(job: Job) {
    println(
        "Job State \n" +
        "isActive >> ${job.isActive}\n" +
        "isCancelled >> ${job.isCancelled}\n" +
        "isCompleted >> ${job.isCompleted}\n"
    )
}​

 

fun main() = runBlocking {
    val job : Job = launch (start = CoroutineStart.LAZY) {
        delay(1000L)
    }
    println(job)
    printJobState(job)
}

 

 
import kotlinx.coroutines.*

fun main() = runBlocking {
    val job : Job = launch {
        delay(1000L)
    }
    // join 메소드를 실행하면 runBlocking 코루틴이 launch가 다 실행될때까지 일시중단. 이후 재게되서 로그 출력.
    job.join()  // launch 코루틴이 실행 안료될떄까지 일시중단
    println(job)
    printJobState(job)
}

import kotlinx.coroutines.*

fun main() = runBlocking {
    val job : Job = launch {
        while (true) {
            // 작업이 실행중임
        }
    }
    job.cancel() // 코루틴 취소 요청. -> Cancelling 상태로 전환.
    println(job)
    printJobState(job)

    val job2 : Job = launch {
        while (true) {
            yield()
        }
    }

    job2.cancelAndJoin()
    println(job2)
    printJobState(job)
}

상태값을 인지하고 코루틴개발에 임하는게 더 퀄리티 좋은 코드를 짤 수 있다. 잘 숙지해서 활용하도록 하자.

 

'코루틴' 카테고리의 다른 글

코루틴 취소 방법  (0) 2025.02.11