Kotlin中的suspend关键字在没有协程的情况下会做什么吗?

时间:2018-11-04 21:27:55

标签: android kotlin

我的理解是Kotlin的协程是库,它在Kotlin中保留了唯一的语言级并发功能,即suspend关键字。

我仍然在Kotlin的协程中忙个不停,但是我想知道这是否对我的问题来说矫kill过正,我的问题是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下载1 GB的数据,那么baz()将同时被调用,而bar(s)等待{{1}填充s }}?

1 个答案:

答案 0 :(得分:2)

“然后在其他地方”部分调用getStringFromNetwork(),因此它不会在suspend函数(包括suspend lambda)之外进行编译,并且只能在协程内部执行。

  

同时将调用baz(),而bar等待s由getStringFromNetwork填充?

否,如果以这种方式编写,则baz()仅在返回bar(s)之后才开始执行。但是当然bar(s)可以启动一个新的协程,它将完成实际工作。