假设我正在编写一个返回字符串的库,这是一项复杂且长时间运行的任务。
我可以选择提供此
interface StringGenerator {
suspend fun generateString(): String
}
or
interface StringGenerator {
fun generateString(): Deferred<String>
}
是否有任何(任一选项的缺点?它们是什么?我应该选择哪个?
Kotlin 协程的设计遵循“默认顺序” https://kotlinlang.org/docs/reference/coroutines/composing-suspending-functions.html#sequential-by-default指导方针。这意味着您的 API 应该始终公开suspend fun
和用户,如果他们确实需要它,可以轻松地将它们包裹起来async
.
其优点类似于cold流量相对于hot流:可挂起的函数仅当控制在其内部时才处于活动状态。当它返回时,它没有留下在后台运行的任务。
每当您返回一个Deferred
,用户必须开始担心如果他们不能等待结果会发生什么。某些代码路径可能会忽略它,调用代码可能会出现异常,然后他们的应用程序就会发生泄漏。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)