LoginSignup
1
1

More than 3 years have passed since last update.

Kotlin 1.3のCoroutineのコンテキストとディスパッチャ⑦(コンテキストの要素の結合)

Posted at

検証環境

この記事の内容は、以下の環境で検証しました。

  • 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が付与されています。
コンテキストの要素は+演算子で結合出ていることがわかります。

まとめ

このブロックで理解できたことは以下のことだと思います。

  • コンテキストの要素は+演算子で結合できる
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1