Android Kotlin中的suspend关键字是否在没有协同路由的情况下执行任何操作?
我的理解是Kotlin的协同程序是库,它将Kotlin中唯一的语言级并发特性保留为Android Kotlin中的suspend关键字是否在没有协同路由的情况下执行任何操作?,android,kotlin,Android,Kotlin,我的理解是Kotlin的协同程序是库,它将Kotlin中唯一的语言级并发特性保留为suspend关键字 我仍然在考虑Kotlin中的协同程序,但我想知道这对于我的问题来说是否有点过头了,因为我的问题是在HttpsURLConnection返回数据后立即更新文本视图。异常处理使得回调非常难看,如果可能的话,我希望避免回调 suspend关键字是否仅仅意味着运行时可能会暂停一个需要一段时间才能完成的函数?或者仅在协同程序内启用暂停?作为一个假设,我能写吗 suspend fun getStringF
suspend
关键字
我仍然在考虑Kotlin中的协同程序,但我想知道这对于我的问题来说是否有点过头了,因为我的问题是在HttpsURLConnection
返回数据后立即更新文本视图。异常处理使得回调非常难看,如果可能的话,我希望避免回调
suspend关键字是否仅仅意味着运行时可能会暂停一个需要一段时间才能完成的函数?或者仅在协同程序内启用暂停?作为一个假设,我能写吗
suspend fun getStringFromNetwork(): String {
val request = URL("https:stackoverflow.com").openConnection()
val result = readStream(request.inputStream)
request.disconnect()
return result
}
//and then elsewhere
foo()
val s = getStringFromNetwork()
bar(s)
baz()
并且要知道,如果getStringFromNetwork
下载了1GB的数据,baz()
将同时被调用,而bar
等待getStringFromNetwork
填充getStringFromNetwork
?则“然后在别处”部分调用getStringFromNetwork()
,因此,它不会在suspend
函数(包括suspend
lambdas)之外编译,它们只能在协同程序内执行
baz()将同时被调用,而bar将等待由getStringFromNetwork填充
不,如果您这样编写,baz()
将仅在bar
返回后开始执行。当然,bar
可以启动一个新的协同程序来完成实际工作。相关: