1. HOME
  2. ブログ
  3. IT技術
  4. 【Kotlin】【Coroutines】asyncの挙動を確認する

【Kotlin】【Coroutines】asyncの挙動を確認する

はじめに

Android Coroutines Async の挙動を確認したのでメモとして残しておく

  1. 準備
  2. まずは基本
  3. asyncとsuspend関数を組み合わせたときの実行順番
  4. 特殊な実装をした場合
  5. 例外を絡めた挙動

1.準備

環境情報

suspend関数作成

まずはasyncで動作させるsuspend関数を作成

例外発生用のsuspend関数作成

例外を発生させる関数も作っておく

ログ表示用のLiveData用意しておく

TextViewにログを表示するために実装(必須ではない)

2.まずは基本

asyncを使わず普通にsuspendを呼び出す

2つのsuspend関数を直列に処理する

ログを確認すると

mySuspend() A完了後にmySuspend() Bが実行されている

普通にAsyncを使ってみる

2つのsuspend関数をそれぞれasyncで囲んで、それぞれawaitで取得する

ログを確認すると

mySuspend() AmySuspend() B並列で実行されている

3. asyncとsuspend関数を組み合わせたときの実行順番

2つのawaitの間で別のsuspendを実行

ログを確認すると

mySuspend() AmySuspend() Bが並列で実行され、mySuspend() A完了を待ってからmySuspend() Cが実行されている(mySuspend() BとmySuspend() Cは並列で実行される)

2つのasyncの間で別のsuspendを実行

ログを確認すると

mySuspend() AmySuspend() B並列で実行され、mySuspend() B完了を待ってからmySuspend() Cが実行されている(mySuspend() AmySuspend() Cは並列で実行される)

4. 特殊な実装をした場合

普通やらないやり方で実装したとき、どのような挙動になるか?

2つのasyncを実行し、片方のawaitを呼ばない

ログを確認すると

mySuspend() B完了を待たずに、launchのブロックを最後まで実行されている(launchブロック完了後も残りを実行し続ける)

1つ目のasyncをlaunch前に実行して、launch内部でawaitする

ログを確認すると

mySuspend() Alaunch前に開始されている

5.例外を絡めた挙動

長くなるので次の記事に記載します。(むしろここからが本番です)

関連記事

採用情報

\ あの有名サービスに参画!? /

バックエンドエンジニア

\ クリエイティブの最前線 /

フロントエンドエンジニア

\ 世界を変える…! /

Androidエンジニア

\ みんなが使うアプリを創る /

iOSエンジニア