$30 off During Our Annual Pro Sale. View Details »

Behavior of nested async in Kotlin Coroutines

yurihondo
December 18, 2018

Behavior of nested async in Kotlin Coroutines

yurihondo

December 18, 2018
Tweet

More Decks by yurihondo

Other Decks in Programming

Transcript

  1. Behavior of nested async in Kotlin Coroutines

  2. About me Androidアプリ開発@DeNA 趣味は、ストリートダンス 今年、長男が爆誕 2 URI 本戸 裕理 (ホンド

    ユウリ)
  3. Introduction 今更ですが! Kotlin 1.3より、Coroutineの安定版が 利用できるようになりました 3

  4. Introduction 私が携わるプロジェクトでもCoroutineの アップデートが 行われました 4

  5. Introduction 結果、 アップデート起因のバグを埋め込み、 修正をする事になりました 5

  6. Introduction そう、 あるあるです 6

  7. Introduction (流出はしていません)  一応、最近センシティブだからね   7

  8. Introduction 今日は、バグ対応から学んだ ◦ ネストしたasyncの振舞いと対応方法 について簡単にお話させて頂きます 8

  9. ネストしたasyncの振舞いと対応方法 9

  10. ver. 0.30.0より、ネストしたasyncのキャンセルが、 親のcoroutineにも伝播するようになったため、 今までエラーハンドリングを意識していなかった 箇所で例外が発生した 該当のFeature <https://github.com/Kotlin/kotlinx.coroutines/releases/tag/0.30.0> Overview for Bug

    10
  11. 例えば、 以下のようなケースで例外が発生するようになった Example 11

  12. 例外が親のlaunchにも伝播する Example 12 Exception

  13. Solution 1 withContextを利用 13

  14. Solution 2 スコープを切り替える 14

  15. 今回の例であれば、launchにCoroutineExceptionHandler を渡して ネストされたのCoroutineのエラーをまとめてしまう Solution 3 例外の集約 15

  16. ※以下は、supervisorScopeの例 Solution 4 Supervisionを導入 16

  17. まとめ 17 これからネスト状態でasyncを扱うときは... 1. withContextを使う 2. Suspend関数に切り出す 3. 例外の集約 4.

    Supervisionの導入 辺りを検討できると良いかも...そして...
  18. まとめ 18 Release Note は、しっかり読みましょう!!! (自戒)

  19. Reference 今回の発表の不明点は、以下でほぼ解消されます 19 ◦ Kotlin Coroutines 0.30.2のExceptionが伝わる仕組み <https://qiita.com/takahirom/items/2846caa1d51e868ef88b> ◦ Kotlin

    Coroutine 1.0.0までに夏から変わったところ <http://sys1yagi.hatenablog.com/entry/2018/12/08/181232>
  20. THANKS! You can find me at: Twitter : URI -

    @yuyuyuyuyuri Pokemon GO : 05URI28 - 0188 7196 1789 20