fun startAsyncFunc() {
  launch {
    asyncFunc1()
    asyncFunc2()
  }
}

fun asyncFunc1() { ... }
suspend fun asyncFunc2() { ... }

我可以不用suspend即可完成工作,它甚至可以使测试更加轻松(无需添加runBlocking即可进行测试。

我的问题:
  • asyncFunc1asyncFunc2哪个更好,为什么?
  • 如果asyncFunc2更好,是否应该在协程中运行函数时始终使用suspend

  • 更新资料

    在最近发布的Kotlin Coroutines中,我注意到一种方法是否不包含任何协程代码(例如launchasync等),编译器会抱怨This inspection reports a suspend modifier as redundant if no other suspend functions are called inside。因此,我认为suspend仅在必须时才使用。

    更新2

    An advice from Google

    最佳答案

    您仅应在需要时声明函数suspend。我会说,如果有疑问,如果编译器不强制您,请不要使用suspend

    在大多数情况下,如果您有充分的理由要暂停函数,则意味着它正在做某事,可能仍然需要您使用诸如withContext之类的暂停函数,这将迫使您声明函数suspend

    请注意,声明函数suspend不会使您的调用者做更多的事情,而没有停止您的函数。如果有的话,就限制了函数的使用。

    我相信一个无需暂停而暂停函数的用例是,当您真正绝对想向世界展示您的函数在计算上很繁重时,从而迫使您的调用者应对暂停。

    关于kotlin - 什么时候使用Kotlin暂停关键字?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54554753/

    10-12 03:59