시배's Android
Kotlin 동시성 프로그래밍 | 3장. 라이프 사이클과 에러 핸들링 본문
비동기 함수
- 결과가 없는 비동기 함수 : 완료 여부를 모니터링할 수 있지만 결과를 갖지 않는 백그라운드 작업이 이런 유형에 속한다.
- 결과를 반환하는 비동기 함수 : 비동기 함수가 웹 서비스에서 정보를 가져올 때 거의 대부분 해당 함수를 사용해 정보를 반환하고자 할 것이다.
잡의 라이프 사이클
- 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")
}
'Book > Kotlin 동시성 프로그래밍' 카테고리의 다른 글
Kotlin 동시성 프로그래밍 | 6장. 채널 - 통신을 통한 메모리 공 (0) | 2023.07.26 |
---|---|
Kotlin 동시성 프로그래밍 | 5장. 이터레이터, 시퀀스 그리고 프로듀서 (0) | 2023.07.22 |
Kotlin 동시성 프로그래밍 | 4장. 일시 중단 함수와 코루틴 컨텍스트 (0) | 2023.07.09 |
Kotlin 동시성 프로그래밍 | 2장. 코루틴 인 액션 (0) | 2023.07.09 |
Kotlin 동시성 프로그래밍 | 1장. Hello, Concurrent World! (0) | 2023.07.09 |