検証環境
この記事の内容は、以下の環境で検証しました。
- Intellij IDEA ULTIMATE 2018.2
- Kotlin 1.3.0
- Gradle Projectで作成
- GradleファイルはKotlinで記述(KotlinでDSL)
準備
詳細は下記の準備を参照してください。
https://qiita.com/naoi/items/8abf2cddfc2cb3802daa
Combining context elements
前回はコンテキストの要素について説明しました。確か、スレッド名を変更するだけでした。
今回のタイトルを見るとその要素を結合するみたいです。
感のいい人はなんとなく予想がつくかと思います。
それでは、読み進めていきます。
Sometimes we need to define multiple elements for coroutine context. We can use + operator for that. For example, we can launch a coroutine with an explicitly specified dispatcher and an explicitly specified name at the same time:
意訳込みですが、訳してみると...
開発をすすめていると時折、複数の要素を結合する必要がでてきます。その際、+演算子を利用します。+演算子を利用すると、明示的に指定した名前のディスパッチャーとコンテキストをもつコルーチンを起動することができます。
多分、launch関数の引数になにか+演算子を使って、ディスパッチャーとコンテキストの情報を追加する気がしてきます。
サンプルコードがあるので確認してみます。
import kotlinx.coroutines.*
fun main() = runBlocking<Unit> {
launch(Dispatchers.Default + CoroutineName("test")) {
println("I'm working in thread ${Thread.currentThread().name}")
}
}
ほぼ、予想通りでした。
実行時に -Dkotlinx.coroutines.debugオプションが必要です。
忘れないようにしましょう。
結果を確認してみます。
I'm working in thread DefaultDispatcher-worker-1 @test#2
スレッド名のところに順次付与された番号「#2」に、更にtestが付与されています。
コンテキストの要素は+演算子で結合出ていることがわかります。
まとめ
このブロックで理解できたことは以下のことだと思います。
- コンテキストの要素は+演算子で結合できる