launch vs async ์ฐจ์ด ์ ๋ฆฌ (Kotlin Coroutines)launch์ async๋ ์ฝ๋ฃจํด์ ์คํํ๋ ๋ฐฉ๋ฒ์ด์ง๋ง, ๋ฐํ๊ฐ๊ณผ ์ฌ์ฉ ๋ชฉ์ ์ด ๋ค๋ฆ
Job์ ๋ฐํํ๋ฉฐ, ๊ฒฐ๊ณผ ๊ฐ์ ๋ฐํํ์ง ์์val job = CoroutineScope(Dispatchers.IO).launch {
println("launch: ์คํ๋จ")
}
job.join() // ์คํ ์๋ฃ๊น์ง ๋๊ธฐ
job.cancel() // ์คํ ์ค๋จ
val deferred = CoroutineScope(Dispatchers.IO).async {
"async: ์คํ ๊ฒฐ๊ณผ"
}
val result = deferred.await() // ๊ฒฐ๊ณผ ๋๊ธฐ
println(result) // "async: ์คํ ๊ฒฐ๊ณผ"
suspend fun main() {
val scope = CoroutineScope(Dispatchers.Default)
// launch๋ ๊ฒฐ๊ณผ๊ฐ์ด ์์
val job = scope.launch {
delay(1000)
println("launch ์คํ ์๋ฃ")
}
// async๋ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํ (Deferred)
val deferred = scope.async {
delay(1000)
"async ์คํ ์๋ฃ"
}
job.join() // launch ์คํ ์๋ฃ ๋๊ธฐ
println(deferred.await()) // async ์คํ ๊ฒฐ๊ณผ ์ถ๋ ฅ
}
โก launch๋ ์คํ๋ง ํ๊ณ ๋๋์ง๋ง, async๋ await()์ ํธ์ถํด์ผ ๊ฒฐ๊ณผ ๊ฐ์ ์ป์ ์ ์์!