Kotlin のコルーチン入門

この記事は何か? Kotlin のコルーチンライブラリに kotlinx.coroutines がある。このライブラリには丁寧なドキュメント が付随しており、それを一歩ずつ写経しながら訳していく。なお、全文を訳してはいないし、自分で書き足した部分もある。興味を持っていただけたのであれば、原文にあたることをお勧めする。 はじめの一歩を踏み出す import kotlinx.coroutines.* fun main() { GlobalScope.launch { // 新しいコルーチンを作りバックグラウンドで動作させる delay(1000L) // 1秒待つ (non-blocking) println("World!") } println("Hello, ") // コルーチンが待っている間メインスレッドが動き続ける Thread.sleep(2000L) // メインスレッドを止めないように sleep する } これの出力結果: Hello, World! コルーチンは軽量なスレッドであり、CoroutineScope の launch で作成できる。このサンプルでは GlobalScope.launch {} でコルーチンを作っており、これはアプリケーションそのものと同じライフサイクルを持つ。 なお、これと同じことは普通の thread でも実現できる。 import kotlin.concurrent.thread fun main() { thread { Thread.sleep(1000L) println("World!") } println("Hello, ") Thread.sleep(2000L) } ブロックする箇所を明示する non-blocking な delay() と blocking な Thread.sleep() が混ざると読みにくい。 runBlocking {} を導入して delay() だけで同じことを実現できる。メインスレッドは runBlocking をトリガーし、 runBlocking 内のコルーチンが終了するまでブロックする。 [Read More]