kotlinのコルーチンをお勉強

まだ勉強中なので間違いあるかも

注意

コルーチンはkotlin 1.1.2ではまだ実験的な機能です

なぜコルーチンを使うか

非同期処理を同期的に書きたい。Noコールバック

// 理想
val users = Http.getUsers()
println(users)

// 現実
Http.getUsers() { users ->
    println(users)
}

使い方

ライブラリとして提供されているのでdependenciesに追加してください https://github.com/Kotlin/kotlinx.coroutines

// コールバックをラップしたsuspend関数を定義する
// suspendCoroutineってのもあるけどエラーになった(使ってたライブラリとの相性?)
suspend fun req() = suspendCancellableCoroutine<YourHttpClientResponse> { c ->
    YourHttpClient("api url") { response ->
        c.resume(response)
    }
}

// launchでコルーチンを作成
launch(CommonPool) {
    val response = req()
    // val response = async(CommonPool) { req() } 並列呼び出し

    // responseを使ったなんかの処理
}

感想

  • 複数のAPIを並列に呼ぼうが直列に呼ぼうが普通の同期処理的感覚で書けるのは楽ですね
  • ただ自分にはまだまだ難しいなと思いました
  • FuturesやGenerators、Channels辺りは正直さっぱりです

参考