Behavior of nested async in Kotlin Coroutines

23e7f90fa36af44f13000c1229240984?s=47 URI
December 18, 2018

Behavior of nested async in Kotlin Coroutines

23e7f90fa36af44f13000c1229240984?s=128

URI

December 18, 2018
Tweet

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