Image
Coroutines/Coroutine Basics

[Coroutine] 8. Coroutine Job의 상태 변수 isActive, isCancelled, isCompleted 알아보기

Job의 상태 변수 : isActive, isCancelled, isCompleted

Job의 상태 변수는 세가지가 있는데 <그림4>의 방식으로 접근이 가능하다.

 

그림1. Job의 상태 종류

 

이 상태 변수들은 다음과 같이 설명될 수 있다.

  • isActive: Job이 실행중인지 여부를 표시
  • isCancelled: Job cancel이 요청되었는지 여부를 표시
  • isCompleted: Job의 실행이 완료되었거나 cancel이 완료었는지를 표시 

 

자세한 상태변화를 아래 예시와 함께 알아보자.

 

Job이 CoroutineStart.LAZY 옵션으로 생성되었을 때 상태 변화

Job을 생성됨에서 실행중 상태로 자동으로 넘기지 않기 위해 CoroutineStart.LAZY 옵션을 이용해 Job의 상태변수를 다루어보자.

  isActive isCancelled isCompleted 비고
생성됨 false false false CoroutineStart.LAZY로 생성
실행 중 true false false start()혹은 join() 실행

Job이 CoroutineStart.LAZY로 생성되면 Job은 생성됨(New)상태에 머문다. 이 때는 실행중도 아니고, 취소도 요청되지 않았고, 완료되지도 않았으므로 isActive, isCancelled, isCompleted가 모두 false이다. 

이제 start()혹은 join()을 통해 Job이 실행 중 상태로 바뀌면 isActive가 false에서 true로 바뀐다.

 

 

Job이 Cancel되었을 때 상태 변화

다음으로는 Job의 cancel이 호출되었을 때 해당 상태에 어떤 일이 일어나는지 알아보자.

  isActive isCancelled isCompleted
실행 중 true false false
취소 중 false true false
취소 완료 false true true

그림2. Job 상태의 종류

먼저 Job은 취소 중 상태로 바뀐다. isCancelled는 취소가 요청되었는지에 대한 변수로 cancel이 호출되면 항상 true가 된다. 하지만, 취소 중인 상태에서는 취소가 완료(Complete)되지 않았으므로 isCompleted가 false이다. 

 

만약 취소가 완료되면 isCompleted는 true로 바뀐다. invokeOnCompletion은 isCompleted의 상태를 관찰하는 메서드로 isCompleted가 false에서 true로 바뀔 때 호출된다. 따라서 취소가 완료되었을 때도 호출된다.

 

 

Job이 완료되었을 때 상태 변화

Job가 완료되었을 때는 다음과 isActive가 true에서 false로 바뀌며 isCompleted가 false에서 true로 바뀐다.

  isActive isCancelled isCompleted
실행 중 true false false
실행 완료 false false true

isCompleted가 false에서 true로 바뀌었으므로 위 cancel과 마찬가지로 invokeOnCompletion 을 통해 설정된 람다식이 호출된다.

 

 

정리

위 내용을 정리하면 다음과 같다.

  isActive isCancelled isCompleted
생성됨(New) false false false
실행 중(Active) true false false
실행 완료(Completed) false false true
취소 중(Cancelling) false true false
취소 완료(Cancelled false true true

 

*Job의 상태 접은글

더보기
*그림1. Job 상태의 종류
  • 생성(New) : Job이 생성된다.
  • 실행 중(Active) : Job이 실행 중이다.
  • 실행 완료(Completed) : Job의 실행이 완료되었다.
  • 취소 중(Cancelling) : Job이 취소되는 중이다. Job에 취소가 요청되면 곧바로 취소되는 것이 아니라, 취소 플래그(isCancelled)만 true로 바꾸고 취소를 확인하는 시점에 취소되므로 취소 중 상태가 있다.
  • 취소 완료(Cancelled) : Job의 취소가 완료되었다. 
반응형

 

이 글의 저작권은 '조세영의 Kotlin World' 에 있습니다. 글, 이미지 무단 재배포 및 변경을 금지합니다.

 

 

Kotlin, Android, Spring 사용자 오픈 카톡

오셔서 궁금한 점을 질문해보세요!
비밀번호 : kotlin22

open.kakao.com