kotlin - 库函数是否应该挂起或返回延迟

标签 kotlin kotlin-coroutines

让我们假设我正在编写一个库,它返回一个字符串,这是一个复杂且长时间运行的任务。

我可以选择提供这个

interface StringGenerator {
   suspend fun generateString(): String
}

或者
interface StringGenerator {
   fun generateString(): Deferred<String>
}

这两种选择是否有任何(缺点)优点,它们是什么?我应该选择哪个?

最佳答案

Kotlin 协程是按照 "sequential by default" 设计的指南。这意味着你的 API 应该总是暴露 suspend fun s 和用户,如果他们真的需要它,可以很容易地将它们包装在 async 中。 .

其优点类似于冷流相对于热流的优点:可暂停功能仅在控制处于其中时才处于事件状态。当它返回时,它并没有留下在后台运行的任务。

每当您返回 Deferred ,用户必须开始担心如果他们无法等待结果会发生什么。一些代码路径可能会忽略它,调用代码可能会出现异常,然后它们的应用程序就会发生泄漏。

关于kotlin - 库函数是否应该挂起或返回延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60448590/

相关文章:

android - Dagger2和协程如何结合?

android-studio - 使用意图操作在 Android Studio 中创建 Kotlin 类

kotlin - Kotlin 中的 shr() 和 ushr() 命名函数有什么区别

kotlin - 将 Jetbrains 公开的库与 Ktor 一起使用并在协程内执行数据库事务是否安全?

android - 使用协程的 Firebase 实时快照监听器

android - 与 Kt Flow 和 Retrofit 的用例或交互

android - 如何在 kotlin 中使用 gson 解析改造 json 主体

kotlin - 当多个协程正在运行时不要退出 Kotlin 程序

kotlin - 是否有一种更有效的方式以某种方式将项目列表映射到成对列表?

kotlin - 我们什么时候使用launch(SupervisorJob())?