fun startAsyncFunc() {
launch {
asyncFunc1()
asyncFunc2()
}
}
fun asyncFunc1() { ... }
suspend fun asyncFunc2() { ... }
我可以不用
suspend
即可完成工作,它甚至可以使测试更加轻松(无需添加runBlocking
即可进行测试。我的问题:
asyncFunc1
与asyncFunc2
哪个更好,为什么? asyncFunc2
更好,是否应该在协程中运行函数时始终使用suspend
? 更新资料
在最近发布的Kotlin Coroutines中,我注意到一种方法是否不包含任何协程代码(例如
launch
,async
等),编译器会抱怨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/