作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在 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/
在我的设置中,我试图有一个界面 Table继承自 Map (因为它主要用作 map 的包装器)。两个类继承自 Table - 本地和全局。全局的将有一个可变的映射,而本地的将有一个只有本地条目的映射。
Rust Nomicon 有 an entire section on variance除了关于 Box 的这一小节,我或多或少地理解了这一点和 Vec在 T 上(共同)变体. Box and Vec
我是一名优秀的程序员,十分优秀!