当前位置: 首页 > 知识库问答 >
问题:

在Kotlin coroutines中,launch/join和async/await之间有什么区别

秦伯寅
2023-03-14

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

共有1个答案

訾俊名
2023-03-14

>

  • launch用于发射和忘记coroutine。这就像是开始一个新的线程。如果launch中的代码以异常终止,那么它将被视为线程中未捕获的异常--通常在后端JVM应用程序中打印到stderr,并使Android应用程序崩溃。join用于等待启动的coroutine完成,并且不传播其异常。但是,崩溃的子coroutine也会取消其父coroutine并产生相应的异常。

    async用于启动计算某些结果的协程。结果由deferred的实例表示,您必须在其上使用awaitasync代码中未捕获的异常存储在生成的deferred中,不会传递到其他任何地方,除非进行处理,否则将以静默方式删除该异常。您一定不要忘记从Async开始的coroutine。

  •  类似资料:
    • 在阅读了这篇博文之后https://blogs.msdn.microsoft.com/pfxteam/2012/03/24/show-i-exposite-asynchronous-wrappers-for-synchronal-methods/,我认为第一个实现是“正确的”,因为“doSomethingAsync()”实际上只是将方法卸载到threadpool中,博文指出: 不应纯粹为了卸载而公

    • 问题内容: 我已经在移动应用程序和Web应用程序中使用了ECMAScript 6 和ECMAScript 7功能(由于Babel)。 第一步显然是达到ECMAScript 6级别。我学习了许多异步模式,promise(确实是很有希望的),生成器(不确定为什么使用*符号)等。其中,promise非常适合我的目的。而且我已经在我的应用程序中使用它们很多次了。 这是我如何实现基本诺言的示例/伪代码- 随

    • 问题内容: 我已经在移动应用程序和Web应用程序中使用过ECMAScript 6 和ECMAScript 7功能(由于Babel)。 第一步显然是达到ECMAScript 6级别。我学习了许多异步模式,promise(确实是很有希望的),生成器(不确定为什么使用*符号)等。其中,promise非常适合我的目的。而且我已经在我的应用程序中使用它们很多次了。 这是我如何实现基本诺言的示例/伪代码- 随

    • 我正在做一个应用程序使用flutter框架。在此过程中,我遇到了Dart和中的关键字。谁能告诉我它们有什么不同吗?

    • 请帮助我理解在哪里使用常规连接以及连接在哪里提取。 例如,如果我们有这两个查询 而且 它们之间有什么区别吗?如果是,何时使用哪一种?

    • 问题内容: 之间有什么区别? 和: 我可以互换使用吗? 问题答案: MySQL在和之间没有区别。他们是一样的。 在两个示例中,子句 将任何类型的联接转换为内部联接。表达此查询的标准方式是