728x90
launch ?
launch는 코루틴 블록을 만드는 코루틴 빌더 중 하나 입니다.
launch는 현재 스레드를 차단하지 않고 새로운 코루틴을 생성할 수 있습니다.
특정 결과값을 반환하지않고 Job객체를 반환 합니다.
launch 사용해보기
fun main() {
val job = CoroutineScope(Dispatchers.IO).launch() {
delay(3000)
println("launch완료")
}
}
실행해 보면 아무것도 출력되지 않는다.
그 이유는 IOThread는 MainThread가 종료되면 같이 종료되기 때문이다.
이를 해결하기 위해서는 IOThread 작업이 완료될 때까지 MainThread에서 기다려줘야 한다.
suspend fun main() {
val job = CoroutineScope(Dispatchers.IO).launch() {
delay(3000)
println("launch완료")
}
delay(4000)
}
MainThread에서 delay를 사용하기위해 suspend 키워드를 붙였다.
그리고 delay로 MainThread를 Blocking 시켜 4초간 기다리게 만들었다.
그뒤로 3초뒤에 IO Thread 작업이 완료되고 "launch완료"를 출력하고 1초뒤에 MainThread가 종료된다.
하지만 우리는 IO Thread가 언제 끝날지 항상 예측할 수 없다.
그래서 delay()로 하는 건 좋은 방법이 아니다.
launch를 하게 되면 Job 객체를 반환받는다고 하였다.
Job객체의 join() 메서드를 사용하면 Job이 종료될때까지 실행되고 있는 코루틴을 일시중단 시킨다.
suspend fun main() {
val job = CoroutineScope(Dispatchers.IO).launch() {
delay(3000)
println("launch완료")
}
job.join()
}
일시중단을하려면 suspend 키워드를 붙여야한다.
delay 대신 Job 객체를 가지고 있는 job에 join() 메서드를 호출하면 호출한 MainThread를 Job이 종료될 때까지 일시 중단시킨다.
이렇게 하면 얼마나 걸릴지 모르는 작업도 수행이 가능하다.
'Android-Kotlin > Coroutine' 카테고리의 다른 글
[Coroutine] Job 이란 ? - Kotlin (0) | 2022.06.26 |
---|---|
[Coroutine] Dispatcher 란? - Kotlin (0) | 2022.06.22 |
[Coroutine] CoroutineScope란? Kotlin (0) | 2022.06.22 |