asynchronous - Kotlin协程中的launch/join和async/await有什么区别

标签 asynchronous kotlin coroutine kotlin-coroutines

kotlinx.coroutines 库中,您可以使用 launch(使用 join)或 async 启动新的协程>(使用 await)。它们之间有什么区别?

最佳答案

  • launch用于触发并忘记协程。这就像开始一个新线程。如果 launch 中的代码以异常终止,那么它会被视为线程中的 uncaught 异常——通常在后端 JVM 应用程序中打印到 stderr 并导致 Android 应用程序崩溃。 join用于等待启动的协程完成,并且不会传播其异常。然而,一个崩溃的 child 协程也会取消它的父协程,并产生相应的异常。

  • async用于启动一个计算某些结果的协程。结果由 Deferred 的实例表示你必须使用await在上面。 async 代码中未捕获的异常存储在生成的 Deferred 中,并且不会传递到其他任何地方,除非处理,否则它将被静默丢弃。 您一定不要忘记您使用异步启动的协程

关于asynchronous - Kotlin协程中的launch/join和async/await有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46226518/

相关文章:

javascript - 为什么我的函数得到 0 个结果?

java - 在 @Async 函数完成之前返回值

php - 异步连接MySQL服务器

python - 请求示例代码来了解返回值的协程中 throw() 的返回值

c# - 这是异步调用同步方法的正确方法吗?

android - 错误 : [Dagger/MissingBinding] *. AuthRepository 不能在没有 @Provides 注释的方法的情况下提供

math - java.lang.Math 与 kotlin.math 兼容吗?

android - Dagger 2的问题

python - 协程、延续、生成器

c - pthreads 与 ucontext 的性能特征