본문 바로가기
Kotlin/공부노트

Coroutine - 2. Structured concurrency, suspend, coroutineScope

by ESHC 2022. 3. 12.

Structured concurrency : 구조적인, 계층적인 코루틴. 새 코루틴은 한 코루틴스코프 안에서 만들어 질 수 있다.

https://kotlinlang.org/docs/coroutines-basics.html#structured-concurrency

 

Coroutines basics | Kotlin

 

kotlinlang.org

 

suspend

launch를 통해 코루틴을 만들 수 있는데 이 코루틴안에서 사용할 함수는 suspend 키워드를 사용해야 한다. 그런데 무작정 쓸 건 아니고 suspending 함수일 때에 suspend 키워드를 쓴다. delay와 같은 함수없는 경우라면 suspend를 쓰지 않아도 된다.

fun main() = runBlocking {=
    launch { doWorld() }
    println("Hello")
}


suspend fun doWorld() {
    delay(1000L)
    println("World!")
}

안드로이드 앱 개발을 할 때 자세히 모르고 썼던 suspend 키워드. 단순히 코루틴을 쓸 때에는 suspend 키워드를 쓴다라고만 알고 있었는데 이제는 명확하게 알고 써야겠다.

 

coroutineScope

runBlocking과 비슷한 코루틴빌더이다. 둘 다 내부가 완료될 때까지 기다린다. 차이점은 runBlocking은 기다리는 동안 현재 스레드를 막고 있고, coroutineScope은 중지되고, 다른 사용을 위해 스레드를 릴리즈한다.

// Sequentially executes doWorld followed by "Done"
fun main() = runBlocking {
    doWorld()
    println("Done")
}

// Concurrently executes both sections
suspend fun doWorld() = coroutineScope { // this: CoroutineScope
    launch {
        delay(2000L)
        println("World 2")
    }
    launch {
        delay(1000L)
        println("World 1")
    }
    println("Hello")
}

'Kotlin > 공부노트' 카테고리의 다른 글

Coroutine - 5. suspending function, async  (0) 2022.04.04
Coroutine - 4. Cancel, isActive  (0) 2022.03.24
Coroutine - 3. job, join  (0) 2022.03.17
Coroutine - 1. launch, runBlocking, delay  (0) 2022.03.10

댓글