什么是挂起协程?

2023-12-19

我是初学者学习coroutines.

不完全是,但我对什么是有一点了解coroutine is.

The suspend function也很难,但是有一点理解。

我正在一步步学习,但有些地方我不明白。

That's suspendCoroutine。在示例代码中,suspendCoroutine and Continuation在块出现中使用,但我不知道这两个是什么。

我看过其他网站,但找不到任何可以轻松解释的地方。

你能解释一下什么吗suspendCoroutine and Continuation很容易使用,如果可能的话,可以举个例子吗?


suspendCoroutine是一个构建器函数,主要用于将回调转换为suspend功能。举例来说,假设您有一些使用回调的遗留(或没有)Api。您可以轻松地将其转换为suspend函数在协程中调用它。例如:

suspend fun getUser(id: String): User  = suspendCoroutine { continuation ->
      Api.getUser(id) { user ->
          continuation.resume(user)
      }
}

这里我们有一个Api函数getUser,其定义在Api类例如这样:

fun getUser(id: String, callback: (User) -> Unit) {...}

suspendCoroutine暂停执行它的协程,直到我们决定通过调用适当的方法继续 -Continuation.resume.... suspendCoroutine主要在我们有一些带有回调的遗留代码时使用。

Using suspendCoroutine将回调转换为suspend当您使用函数时,函数使代码顺序化suspend功能。

例如,不要像这样有一个回调地狱:

Api.getUser(id) { user ->
      Api.getProfile(user) { profile ->
          Api.downloadImage(profile.imageId) { image ->
              // ...
          }
      } 
}

申请后suspendCoroutine到这些回调并将它们转换为suspend函数,代码如下所示:

val user = getUser(id)
val profile = getProfile(user)
val image = downloadImage(profile.imageId)
//...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是挂起协程? 的相关文章

随机推荐

  • 我们如何从远程资源管理器中删除 ssh 目标

    远程资源管理器侧边栏有一个明显的图标 用于添加新目标 但我找不到用于删除或编辑目标的选项 就我而言 服务器的 IP 经常更改 因此它们只是继续在侧边栏中添加 现在有清理方法 目标是否存储在我可以手动编辑的文件中 您可以通过编辑删除或编辑它
  • 合并不同维度 r 的列表元素[重复]

    这个问题在这里已经有答案了 我有一个 df df data frame year c rep 2018 4 rep 2017 3 Area c 1 4 1 3 P 1 7 N 1 7 我想按年份将其拆分 然后再次将所有内容合并在一起 以便我
  • 绘制圆角矩形时出现透明度问题

    我正在尝试使用我在教程中找到的一些代码绘制带圆角的矩形 我稍作修改 Rounded rectangle algorithm copied from http ju outofmemory cn entry 18060 def round c
  • 使用 urllib2 时出现“TypeError: a float is required”

    我正在关注推特 API 文档 https dev twitter com docs auth application only auth发出仅限应用程序的请求 执行时发生错误第2步 获取不记名令牌 我不熟悉回溯中这些模块的详细信息 有人可以
  • 如果函数没有显式使用“ret”,为什么没有返回值

    我有以下程序 SECTION text main mov ebx 10 mov ecx 50 repeat inc ebx loop repeat mov eax ebx ret 当该程序运行时 它按预期返回 60 然而 如果你放弃了最后的
  • Cloudant 和 CouchOne 之间的区别?

    我想知道 Cloudant 和 CouchOne 之间有什么区别 好问题 我的快速回答 CouchOne 由 CouchDB Apache 项目的创始人 Damien Katz 领导 CouchOne 现在专注于缩小 couchdb 的规模
  • 如何提高填充大量树视图的性能?

    首先 我正在以问答方式回答我自己的问题 所以我不一定需要任何人来回答这个问题 这是我学到的东西 很多人都可以利用它 我有一个由许多不同节点组成的树视图 每个节点的后面都有一个对象Data属性 对象引用一个对象主列表中的不同层次结构级别 该列
  • 无法使用 Knockout JS 从 jquery 自动完成中选择/绑定项目

    当我终于能够从列表中添加和删除项目之后 看小提琴 http jsfiddle net spstieng THJE3 46 我继续实现 jQuery 自动完成 看完之后卢恩的例子 https stackoverflow com questio
  • 如何在jQuery中缓存$.post-request的结果?

    我有一个小的 jQuery 脚本 它通过查看 ID 来获取信息 防止多次请求相同数据的最佳方法是什么 例如 在 jQuery 中缓存的最佳实践是什么 我尝试过使用 post and ajax选项 cache 设置为 true 但请求发送多次
  • 使用 jQuery 的 .each() 函数将函数附加到多个幻灯片容器

    我在单页网站上有很多小的 jQuery Cycle 幻灯片 div 容器 例如 div class foo bar data value varies on each container img src directory img 0 jp
  • Unity3D - 如何制作纹理改变静音按钮/切换?

    我正在尝试在我的 Android 游戏菜单中制作一个静音按钮 因此当我按下该按钮时 纹理会从正在播放的扬声器符号更改为静音扬声器符号 我已经在 Photoshop 中制作了 因此 当音频播放时 它将有一个 扬声器 符号 但是当我按下它时 它
  • PHP for iPad 或其他解决方案

    这是一个棘手的问题 我正在为 iPad 开发一个网络应用程序 该应用程序将作为信息亭安装 该应用程序本质上是一个测验 不需要将数据存储在数据库中 但需要处理从一页到另一页的数据 从问题页到结果页 最初的解决方案是简单的 PHP 我现在获悉
  • 使用http状态202进行异步操作

    我正在为接受用户贡献数据的服务编写 REST API 我希望所有操作保持完全异步 这包括 PUT POST DELETE 甚至 GET 请求 我的想法是接收请求 对其进行足够的处理以确保它是有效的请求 然后传递 HTTP 202 接受的响应
  • 在多次调用的函数内编译正则表达式

    如果您在函数内编译正则表达式 并且该函数被多次调用 Python 是否每次都重新编译正则表达式 或者 Python 是否缓存已编译的正则表达式 假设正则表达式没有更改 例如 def contains text of interest lin
  • Play 2.4:表单:找不到参数消息的隐式值:play.api.i18n.Messages

    我是 Play 框架的新手 并试图模仿你好世界在我的本地机器上进行示例 但遇到错误 routes Home page GET controllers Application index Hello action GET hello cont
  • 如何使用 JSON 从 WCF REST 服务返回 Base64 编码的字节数组?

    我有一个简单的 WCF REST 方法 它将返回字节数组中的图像 文件 等 OperationContract WebGet UriTemplate TestMethod byte TestMethod 服务合同受约束webHttpBind
  • Windows 10 IIS 服务器上的 Python Flask 托管

    我想在 Windows 10 IIS 服务器上托管我的 Python Rest API 首先 我尝试托管一个示例应用程序 但无法做到这一点 my app py from flask import Flask app Flask name a
  • 在近协议中使用 ed25519 进行签名和验证

    我正在尝试使用 javascript 对消息进行签名签名留言 https github com near near api js blob 25e7e60203965aee062ca19f352ff765859896ef src signe
  • 获取 ASP.NET MVC 中当前操作/控制器的自定义属性列表

    查看示例代码http lukesampson com post 471548689 entering and exiting https with asp net mvc http lukesampson com post 47154868
  • 什么是挂起协程?

    我是初学者学习coroutines 不完全是 但我对什么是有一点了解coroutine is The suspend function也很难 但是有一点理解 我正在一步步学习 但有些地方我不明白 That s suspendCoroutin