handling~AndroidKotlincoroutinesこれは私的なCoroutinesに関するメモです。supervisorScopeについて触れます。指摘点ありましたら遠慮なくまさかり飛ばしてもらえればと思います。Coroutinesとは中断(suspend)と再開(resume)の機能によってスレッドよりも低コスト・可読性高く非同期処理を扱える導入Kotlin1.3でstableになりました。$msg")GlobalScope.launchGlobalScopeはコルーチンのスコープで、すべてのコルーチンはいずれかのスコープに紐づくことになっています。Worldになります。launchはその実行中のスレッド(今回はmain)をブロックしないためです。そのため処理したいならほんの少しだけスレッドを停止させてあげれば可能です。Worldただしアプリ開発やサーバサイド開発するうえで、このようなコードをずっと書いていくわけにもいかないと思います。runBlockingそこで、runBlockingを使います。このブロックで囲まれた部分は現在のスレッドをブロックして実行します。WorldrunBlockingのブロックが終了することを待ってから最後のloggerへ移ります。コルーチン内で他のコルーチンを記述する場合はどうなるのでしょうか。(=親子関係)Job#Join子のGlobalScope.launchで記述されたJobに対してjoin()することで親のコルーチンは子のコルーチンの終了を待機します。変数宣言せずそのまま記述してもよいのですがこちらのほうが管理がずっと楽になりますね。finally子関係にあるchild2()側で1秒後に例外が投げられることで、child1()は実行されず親のコルーチンがキャンセルされます。childに対してExceptionをそれぞれ管理しつつきちんと実行されるにはどうしたらよいでしょう。supervisorScopechildに関係なく実行させたい場合はsupervisorScopeを使います。試しに上記のコードにそれだけを挿入したコードを実行してみます。finallyのようになり、child1自体も実行されるようになりました。catchされずExceptionが挙げられてしまいました。supervisorを使う場合は子の例外が親に伝播されないためです。そのため、子自身に例外処理を定義する必要があります。CoroutineExceptionHandlerCoroutineExceptionHandlerを使って例外を定義できます。それを対象の子のコルーチンに挿入して対応ができます。}}これで例外なく全ての子関係のコルーチンが実行できるようになりました。upLoginユーザーは見つかりませんでした。