Behavior of nested async in Kotlin Coroutines
by
yurihondo
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Behavior of nested async in Kotlin Coroutines
Slide 2
Slide 2 text
About me Androidアプリ開発@DeNA 趣味は、ストリートダンス 今年、長男が爆誕 2 URI 本戸 裕理 (ホンド ユウリ)
Slide 3
Slide 3 text
Introduction 今更ですが! Kotlin 1.3より、Coroutineの安定版が 利用できるようになりました 3
Slide 4
Slide 4 text
Introduction 私が携わるプロジェクトでもCoroutineの アップデートが 行われました 4
Slide 5
Slide 5 text
Introduction 結果、 アップデート起因のバグを埋め込み、 修正をする事になりました 5
Slide 6
Slide 6 text
Introduction そう、 あるあるです 6
Slide 7
Slide 7 text
Introduction (流出はしていません) 一応、最近センシティブだからね 7
Slide 8
Slide 8 text
Introduction 今日は、バグ対応から学んだ ○ ネストしたasyncの振舞いと対応方法 について簡単にお話させて頂きます 8
Slide 9
Slide 9 text
ネストしたasyncの振舞いと対応方法 9
Slide 10
Slide 10 text
ver. 0.30.0より、ネストしたasyncのキャンセルが、 親のcoroutineにも伝播するようになったため、 今までエラーハンドリングを意識していなかった 箇所で例外が発生した 該当のFeature Overview for Bug 10
Slide 11
Slide 11 text
例えば、 以下のようなケースで例外が発生するようになった Example 11
Slide 12
Slide 12 text
例外が親のlaunchにも伝播する Example 12 Exception
Slide 13
Slide 13 text
Solution 1 withContextを利用 13
Slide 14
Slide 14 text
Solution 2 スコープを切り替える 14
Slide 15
Slide 15 text
今回の例であれば、launchにCoroutineExceptionHandler を渡して ネストされたのCoroutineのエラーをまとめてしまう Solution 3 例外の集約 15
Slide 16
Slide 16 text
※以下は、supervisorScopeの例 Solution 4 Supervisionを導入 16
Slide 17
Slide 17 text
まとめ 17 これからネスト状態でasyncを扱うときは... 1. withContextを使う 2. Suspend関数に切り出す 3. 例外の集約 4. Supervisionの導入 辺りを検討できると良いかも...そして...
Slide 18
Slide 18 text
まとめ 18 Release Note は、しっかり読みましょう!!! (自戒)
Slide 19
Slide 19 text
Reference 今回の発表の不明点は、以下でほぼ解消されます 19 ○ Kotlin Coroutines 0.30.2のExceptionが伝わる仕組み ○ Kotlin Coroutine 1.0.0までに夏から変わったところ
Slide 20
Slide 20 text
THANKS! You can find me at: Twitter : URI - @yuyuyuyuyuri Pokemon GO : 05URI28 - 0188 7196 1789 20