fun main() = runBlocking {
launch {
delay(1000L)
println("World!") // "World!"
}
println("Hello") // 메인 루틴은 코루틴(서브루틴)이 실행되는 동안 실행
}
fun main() {
GlobalScope.launch {
delay(1000)
print("task 2")
}
print("task 1")
}
fun main() = runBlocking {
launch {
delay(1000)
println("task 2")
}
println("task 1")
}
fun main() = runBlocking { // CorutineScope
launch { doWorld() }
println("Hello")
}
// 작업이 지연 될 수 있는 함수
suspend fun doWorld() {
delay(1000L)
println("World!")
}
launch 블럭 안에서 코루틴을 사용하는 함수의 코드가 있다면 그 함수에 suspend 키워드를 필수로 붙여줘야한다.
만약 다음과 같이 launch 코루틴 빌더를 생략한다면 에러가 발생하진 않지만, delay가 되는 코드는 생략된다.
fun main() = runBlocking {
doWorld()
println("Hello")
}
suspend fun doWorld() {
delay(1000L) // launch 함수를 사용하지 않아 무시됨.
println("World!")
}
fun main() = runBlocking {
doWorld() // do World 작업을 수행 후 다음 작업을 수행한다.
println("Done")
}
suspend fun doWorld() = coroutineScope { // this: CoroutineScope
launch {
delay(2000L)
println("World 2")
}
launch {
delay(1000L)
println("World 1")
}
println("Hello")
}
https://kotlinlang.org/docs/coroutines-basics.html#scope-builder