1. ホーム
  2. 非同期

[解決済み】Kotlinのコルーチンにおけるlaunch/joinとasync/awaitの違いとは?

2022-04-04 18:28:40

質問

kotlinx.coroutines ライブラリを使用すると、新しいコルーチンを開始することができます。 launch (を使用します。 join ) または async (とともに await ). 両者の違いは何ですか?

どのように解決するのですか?

  • launch は、以下のように使用されます。 ファイア・アンド・ゲット・コルーチン . 新しいスレッドを立ち上げるようなものです。の中のコードが launch が例外で終了した場合、その例外は 無捕捉 通常、バックエンドのJVMアプリケーションでは標準エラーに出力され、Androidアプリケーションはクラッシュします。 join は起動したコルーチンの完了を待つために使用され、その例外は伝搬しません。しかし、クラッシュした コルーチンは、対応する例外とともに、その親をキャンセルする。

  • async は、以下のように使用されます。 ある結果を計算するコルーチンを開始します。 . のインスタンスで表されます。 Deferred で、あなたは しなければならない 使用 await を乗せる。の内部でキャッチされない例外が発生します。 async のコードは、結果的に Deferred であり、他のどこにも配送されないので、処理されない限りは黙って落とされます。 非同期で開始したコルーチンのことを忘れてはいけません(MUST NOT)。 .