kotlin/launch()
kotlin/launch()
このコードは、printForecastとprintTemperatureを並行に実行しない
code:kotlin
import kotlin.system.*
import kotlinx.coroutines.*
fun main() {
val time = measureTimeMillis {
runBlocking {
println("Weather forecast")
printForecast()
printTemperature()
}
}
println("Execution time: ${time / 1000.0} seconds")
}
suspend fun printForecast() {
delay(1000)
println("Sunny")
}
suspend fun printTemperature() {
delay(1000)
println("30\u00b0C")
}
code:出力
Weather forecast
Sunny
30°C
Execution time: 2.128 seconds
delay(1000)がそれぞれ並行に実行されず、実行には2.128秒を要する
これはあんまりパフォーマンス良くないですね?
並行して実行するには、以下のようにする
code:kotlin
import kotlin.system.*
import kotlinx.coroutines.*
fun main() {
val time = measureTimeMillis {
runBlocking {
println("Weather forecast")
launch {
printForecast()
}
launch {
printTemperature()
}
println("Have a good day!")
}
}
println("Execution time: ${time / 1000.0} seconds")
}
suspend fun printForecast() {
delay(1000)
println("Sunny")
}
suspend fun printTemperature() {
delay(1000)
println("30\u00b0C")
}
code:出力
Weather forecast
Have a good day!
Sunny
30°C
Execution time: 1.122 seconds
launch()で包むことで、並行して実行を要求
printForecastとprintTemperatureは、別の異なる子コルーチン内で実行される
Have a good day!の出力タイミングに注目
launch()は、コルーチンを起動した後すぐ次の命令に移る性質がある、とわかる
「撃ちっぱなし」
この例では、関数が終了するタイミングについて扱っていない