【Kotlin】launch ビルダーで Coroutine を実行する
今回は、Kotlin Coroutines の launch ビルダーについて解説します。
なお、ここに掲載しているソースコードは以下の環境で動作確認しています。
- Android Studio Chipmunk | 2021.2.1 Patch 1
- JDK 11.0.12
- Android Gradle Plugin 7.2.1
- Kotlin 1.7.0
- Gradle 7.4.2
- org.jetbrains.kotlinx:kotlinx-coroutines-core 1.6.3
そして、アプリの build.gradle ファイルに kotlinx-coroutines-core
をインポートしています。
dependencies {
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.3"
}
launch ビルダーとは?
launch ビルダーとは、現在のスレッドをブロックせずに新しい Coroutine を起動し、その起動した Coroutine をハンドリングする Job を返す Coroutine ビルダーです。
例えば、以下のように使います。
fun main() = runBlocking { // (1) ノンブロッキングで Coroutine を起動する。 val job = launch { delay(100L) // (4) "World!" を標準出力する。 println("World!") } // (2) "Hello," を標準出力する。 println("Hello,") // (3) launch ビルダーで起動された Coroutine が完了するまで待つ。 job.join() // (5) "End." を標準出力する。 println("End.") }
上記のコードを実行すると、以下の結果を得られます。
Hello, World! End.
さきにも述べた通り、launch ビルダーは現在のスレッドをブロックせずに新しい Coroutine を起動します。よって、"World!" を標準出力する Coroutine と "Hello," を標準出力する Coroutine は並列して実行されます。
また、launch ビルダーが返す Job を使って、launch ビルダーにより起動された Coroutine をその Coroutine の外からハンドリングできます。上記のコードでは、Job の join を使って、Coroutine の完了をノンブロッキングで待機しています。