【问题标题】:Should a library function be suspend or return deferred库函数应该暂停还是延迟返回
【发布时间】:2020-02-28 09:19:48
【问题描述】:

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

我可以选择提供这个

interface StringGenerator {
   suspend fun generateString(): String
}

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

这两个选项有什么(缺点)优点吗?我应该选择哪个?

【问题讨论】:

    标签: kotlin kotlin-coroutines


    【解决方案1】:

    Kotlin 协程是按照 "sequential by default" 准则设计的。这意味着您的 API 应该始终公开suspend funs,并且用户在他们真正需要它时可以轻松地将它们包装在async 中。

    其优点类似于 流相对于 流的优点:可挂起的功能仅在控制位于其中时才处于活动状态。当它返回时,它并没有留下在后台运行的任务。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-14
      • 2011-02-25
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-19
      相关资源
      最近更新 更多