/LaunchVSAsync

LaunchVSAsync

Primary LanguageKotlin

Kotlin:launch vs async

相似点

  • 都用于启动协程:无论是launch 还是async 都可以用于启动一个新的协程。
  • 都返回job对象:无论使用哪个构建块,都会返回一个Job 对象,该对象用于协程的控制和管理。
  • 都支持协程的取消:您可以使用返回的Job来取消正在运行的协程。

不同点

  • 返回值:launch 不返回任何结果,它只是启动一个协程并在后台执行任务,async 返回一个Deferred 对象,该对象包装了异步计算的结果。你可以使用await函数来获取该结果。
  • 用途:launch 用于执行无返回值的并发任务,例如在后台执行一些操作而不需要等待结果,async 用于执行需要返回值的并发任务,可以用来等待它完成并获取其结果。
  • 异常处理:当在launch 中发生异常时,异常通常不会传播给调用方,如果你希望在launch中的协程中捕获异常并处理它,需要明确的使用try/catch 来捕获异常。 与 launch 不同,async 异常会自动传播给调用方包装在 Deferred 对象中。

结论

  • launch 和 async 都是Kotlin 协程中的关键构建块,用于并发任务。它们的主要区别在于返回值和用途。
  • launch 用于无返回值的任务,而async 用于需要返回值的任务。
  • 异常区别在于异常的处理时机和返回结果的方式。在 launch 中,异常会立即抛出,而在 async 中,异常会被延迟到调用 await 方法时抛出。