Hello, Android!

코루틴의 동작 제어 본문

Kotlin

코루틴의 동작 제어

lwndnjs93 2020. 9. 13. 19:11

- 반복

반복하는 코드를 작성하기 위해서 repeat() 함수를 사용할수 있다

repeat()을 사용하게 되면 데몬 스레드로 실행하게 된다

 

- 데몬 스레드

데몬 스레드는 주 스레드와는 별개로 만들어지는 보조 스레드이다

주 스레드가 종료되면 데몬 스레드는 강제적으로 종료된다 

repeat의 매개변수로 반복 횟수가 들어간다

하지만 repeat이 launch 내에서 반복을 하지만

launch는 GlobalScope로 생명 주기가 한정되어 있기 때문에

메인 스레드가 종료되면 같이 종료된다

 

- 작업 취소

cancel 함수를 사용하게 되면 원하는 타이밍에 코루틴 작업을 취소하는것이 가능하다

launch를 통하여 코루틴 작업을 실행하지만

main 함수의 끝에서 job.cancel() 이 있기때문에

코루틴 작업 실행 후 3초 뒤 cancel을 만나

작업을 취소하게 된다

 

- finally 실행

try ~ finally를 사용하면 코루틴 종료시에 finally 블록을 실행하게 된다

코루틴 실행 후 약 1.3초가 지난 뒤 코루틴을 취소하게 된다

하지만 코루틴 내부에 try ~ finally 구문이 있어서

finally 블록이 실행된 뒤 main함수의 마지막 println 함수가 호출된다

 

만약 finally 블록에서 시간이 많이 걸리는 작업 혹은 지연 함수가 사용되는 경우

실행을 보장하기 위해 NonCancellable 문맥에서 실행해야 한다

finally 블록에서 NonCancellable 문맥에서 

withContext in finally 를 출력한 뒤

1초 기다리고

NonCancellable delay 1000 이 출력된 뒤

main end 가 출력된다

만약 NonCancellable 문맥 없이 위와 같이 실행하게 되면

NonCancellable delay 1000 는 출력하지 못한다

 

- 실행 상태의 판단

만약 취소 시그널을 받아 특정 작업을 하기 위해서는 isActivity 를 활용하면 된다

isActive는 실행중일때는 true가

취소된 상태에서는 false가 넘어온다

 

- 코루틴 시간의 만료

withTimeout() 함수를 사용하면 매개변수에 지정한 시간이 지난 뒤

함수의 블록을 취소한 뒤 TimeoutCancellationException 에러를 발생시킨다

 

'Kotlin' 카테고리의 다른 글

채널  (0) 2020.09.21
코루틴의 문맥  (0) 2020.09.12
runBlocking  (0) 2020.09.06
코루틴 launch, async  (0) 2020.09.05
스레드  (0) 2020.08.29