Skip to content
Update Kotlin coroutines authored by umaumax's avatar umaumax
......@@ -5,12 +5,36 @@
## 読み物
* [kotlin coroutines の各種例とガイド / Guide to kotlinx.coroutines by example - Qiita]( https://qiita.com/kazuki-ma/items/548e9872f2da0d79ec3c )
## suspend関数
[使うだけに絞ったsuspend関数入門 | karino2のあおぞらAndroid開発教室]( https://karino2.github.io/kotlin-lesson/suspend_intro.html )
* suspend関数のbodyでは、別のsuspend関数を呼び出す
* suspend関数のbody部は、別のsuspend関数呼び出しを区切りにブロックに分割され、分割されたブロックはキューに詰められて順番に実行される
### レビュー観点
* `suspend`を付与する必要のない関数につけていないかどうかを確認すること
* 関数内で、`launch`してjobを生成している場合には直接非同期な関数を呼んでいるわけではないので、`suspend`関数である必要はない
## GlobalScope
* [GlobalScope]( https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/-global-scope/ )
* [Kotlin コルーチン 1.5: GlobalScope がデリケート扱いに、チャンネル API の改善など | The Kotlin Blog]( https://blog.jetbrains.com/ja/kotlin/2021/06/kotlin-coroutines-1-5-0-released-ja/ )
* [Android でのコルーチンに関するベスト プラクティス | Kotlin | Android Developers]( https://developer.android.com/kotlin/coroutines/coroutines-best-practices?hl=ja#global-scope )
`GlobalScope`がデリケート扱いとなっていること以外にも、キャンセル可能ではないことも問題である( GlobalScopeはアプリケーションの寿命を通じて動作する最上位のコルーチンを起動するには使用され、途中でキャンセルされないため)
`GlobalScope`を利用しないようにすること
* suspendな関数とする
* 外からコルーチンスコープを引数で指定できるようにする(ディスパッチャも同様に指定できるようにすると良いが必須ではない)
## launch
* 新しいコルーチンを作成して、即座に実行を開始する
* 返り値の返却はできない
* コルーチンの処理結果の返り値の返却はできない
[launch]( https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/launch.html )の返り値は[Job]( https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/-job/ )である
### launchの返り値のjobの挙動
⭐返り値のjobはスコープを抜けたとしても、勝手にデストラクションでjoinされないので、処理の完了を待機するには明示的にjoinする必要がある
## Job
[Job]( https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/-job/ )
......
......