시배's Android

Kotlin 동시성 프로그래밍 | 3장. 라이프 사이클과 에러 핸들링 본문

Book/Kotlin 동시성 프로그래밍

Kotlin 동시성 프로그래밍 | 3장. 라이프 사이클과 에러 핸들링

si8ae 2023. 7. 9. 21:58

비동기 함수

  • 결과가 없는 비동기 함수 : 완료 여부를 모니터링할 수 있지만 결과를 갖지 않는 백그라운드 작업이 이런 유형에 속한다.
  • 결과를 반환하는 비동기 함수 : 비동기 함수가 웹 서비스에서 정보를 가져올 때 거의 대부분 해당 함수를 사용해 정보를 반환하고자 할 것이다.

 

잡의 라이프 사이클

  • New : 존재하지만 아직 실행되지 않는 잡
    • 잡은 기본적으로 launch()나 Job()을 사용해 생성될 때 자동으로 시작된다.
    • 잡을 생성할 때 자동으로 시작되지 않게 하려면 CoroutineStart.LAZY를 사용해야 한다.
  • Activie : 실행 중인 잡. 일시 중단된 잡도 활성으로 간주된다.
    • start() : 잡이 완료될 때까지 기다리지 않고 잡을 시작한다. 일시 중단 함수나 코루틴에서 호출할 필요가 없다.
    • join() : 잡이 완료될 때까지 실행을 일시중단한다. 일시 중단 함수나 코루틴에서 호출할 필요가 있다.
  • Canceling : 실행 중인 잡에서 cancel()이 호출되면 취소가 완료될 때까지 시간이 걸리기도 한다.
    • cancel() 함수를 호출해야 한다.
    • cancelAndJoin() 실행을 취소할 뿐만 아니라 취소가 완료될 때까지 현재 코루틴을 일시 중단한다. 
  • Cancelled : 취소로 인해 실행이 완료된 잡. 취소된 잡도 완료로 간주될 수 있다.
    • getCancellationException() 함수를 통해 취소에 대한 정보를 얻을 수 있다.
    • 해당 함수는 CancellationException을 반환한다.
  • Completed : 잡이 더 이상 실행되지 않는 경우

잡의 현재 상태 확인

  • isActive : 잡이 활성 상태인지 여부. 잡이 일시 중지인 경우도 true를 반환한다.
  • isCompleted : 잡이 실행을 완료했는지 여부
  • isCancelled : 잡 취소 여부. 취소가 요청되면 즉시 true가 된다.
상태(State) isActive isCompleted isCancelled
생성됨(Created) false false false
활성(Active) true false false
취소 중(Cancelling) false false true
취소 됨(Cancelled) false true true
완료됨(Completed) false true false

디퍼드

  • 결과를 갖는 비동기 작업을 수행하기 위해 잡을 확장한다.
  • 잡과 라이프 사이클은 비슷하다.
  • 처리되지 않은 예외를 자동으로 전파하지 않는다.
  • await() 호출하여 예외를 전파 받을 수 있다.

상태는 한 방향으로만 이동

잡이 특정 상태에 도달하면 이전 상태로 되돌아가지 않는다.

fun main() = runBlocking {
    val time = measureTimeMillis {
        val job = GlobalScope.launch {
            delay(2000)
        }

        job.join()

        job.start()
        job.join()
    }

    println("Took $time ms")
}