Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Kotlin中的suspend关键字是否在没有协同路由的情况下执行任何操作?_Android_Kotlin - Fatal编程技术网

Android Kotlin中的suspend关键字是否在没有协同路由的情况下执行任何操作?

Android Kotlin中的suspend关键字是否在没有协同路由的情况下执行任何操作?,android,kotlin,Android,Kotlin,我的理解是Kotlin的协同程序是库,它将Kotlin中唯一的语言级并发特性保留为suspend关键字 我仍然在考虑Kotlin中的协同程序,但我想知道这对于我的问题来说是否有点过头了,因为我的问题是在HttpsURLConnection返回数据后立即更新文本视图。异常处理使得回调非常难看,如果可能的话,我希望避免回调 suspend关键字是否仅仅意味着运行时可能会暂停一个需要一段时间才能完成的函数?或者仅在协同程序内启用暂停?作为一个假设,我能写吗 suspend fun getStringF

我的理解是Kotlin的协同程序是库,它将Kotlin中唯一的语言级并发特性保留为
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
可以启动一个新的协同程序来完成实际工作。

相关: