Closed5

Kotlinの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() {
    ...
}
山下 裕一朗山下 裕一朗

GlobalScopeCoroutineScope に変更。

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にクローズされました