Closed5
Kotlinのcoroutinesの挙動を確認する
定期的に coroutines の動作を忘れてしまうので整理する。
とりあえず coroutines の中で実行する関数。
fun process(i: Int) {
println("Work $i start")
Thread.sleep(1000)
println("Work $i done")
}
あと待機用の関数を用意。
fun postProcess() {
println("Waiting start")
Thread.sleep(2500)
println("Waiting done")
}
coroutines を使用しない基本型。
fun main() {
repeat(2) {
process(it)
}
}
出力
Work 0 start
Work 0 done
Work 1 start
Work 1 done
単にシーケンシャルに実行される。
GlobalScope
を使用
fun main() {
repeat(2) {
GlobalScope.launch {
process(it)
}
}
postProcess()
}
出力
Waiting start
Work 1 start
Work 0 start
Work 1 done
Work 0 done
Waiting done
GlobalScope
のところで以下の警告がでた。
This is a delicate API and its use requires care.
Make sure you fully read and understand documentation of the declaration that is marked as a delicate API.
@OptIn
を追加することで警告は消えた。
@OptIn(DelicateCoroutinesApi::class)
fun main() {
...
}
GlobalScope
を CoroutineScope
に変更。
fun main() {
repeat(2) {
CoroutineScope(Dispatchers.IO).launch {
process(it)
}
}
postProcess()
}
出力
Waiting start
Work 1 start
Work 0 start
Work 0 done
Work 1 done
Waiting done
同時実行された。
このスクラップは2023/02/15にクローズされました