当前位置: 首页 > 知识库问答 >
问题:

Kotlin中的suspend关键字在没有关联项的情况下能做什么吗?

巫马嘉祯
2023-03-14

我仍然在考虑Kotlin中的coroutines,但我想知道这是否对我的问题有些矫枉过正,即在HttpSurlConnection返回数据时立即更新文本视图。异常处理使回调变得非常丑陋,我想尽可能避免这些

suspend关键字是否仅仅意味着运行库可能会挂起一个需要一段时间才能完成的函数?还是只在coroutine内启用挂起?作为一个假设,我能写吗

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)则等待sGetStringFromNetwork填充?

共有1个答案

施默
2023-03-14

“然后在别处”部分调用getStringFromNetwork(),因此它不会在suspend函数(包括suspendlambdas)之外编译,它们只能在coroutines内执行。

baz()将在此期间被调用,而bar(s)等待getStringFromNetwork填充s?

不,如果这样写,baz()只在bar(s)返回后才开始执行。当然,bar(s)可以启动一个新的coroutine,它将完成实际的工作。

 类似资料:
  • 在为android开发时,我有时会遇到类似这样的事情: 我不明白关键字有什么意义。

  • 问题内容: 为什么没有用于同步/并发的关键字? 到目前为止,我的研究为我提供了一种解决方案,您包装了一些高级类并使用它们来处理并发。 给定一个纯Kotlin项目,如果需要一个小型的高度优化的组件来处理并发等,该怎么办? 我的印象是Kotlin是Java的辅助语言,可以用Kotlin编写90%的代码,但有一些Java语言无法用Kotlin表示。 这是正确的吗?这是原来的样子吗? 问题答案: Kotl

  • 为什么没有同步和并发的关键字? 到目前为止,我的研究给了我一个解决方案,你包装一些高级类,并用它们来处理并发。 给定一个纯Kotlin的项目,如果需要一个以线程安全方式处理并发的小型、高度优化的组件,应该怎么做? 我的印象是,Kotlin是Java的一种辅助语言,可以用Kotlin编写90%的代码,但有一些Java代码无法用Kotling表达。 这是对的吗?这就是它的目的吗?

  • 这样对吗?这就是它的初衷吗?

  • 我正在从文档中学习反应,但不确定在这个例子中超级()做什么。通常,它不需要传递给创建新实例的参数,然后调用React吗?组件的构造函数方法将这些参数合并到实例中?没有任何争论它是做什么的?

  • 我是计算机科学专业的二年级学生,我写了一个程序,它连接到一个IRC客户端,嗅探等待用户问“推特是关于什么的?” 该程序嗅探关键字“推特”,然后运行一个方法,使用整个输入行查找推特句柄。 问题是,如果我在编译之前知道关键字是什么,我就知道如何查找关键字,但在这种情况下,关键字可能是任何twitter句柄,所以我不确定搜索它的最佳方法是什么。 我尝试了以下方法:inputLine。子字符串(i 1,i