Hack 的异步特性 async 和 await

简介: 异步编程是一种编程的设计模式。它允许多个独立的任务协同工作,在同一线程内传递控制权。从最小依赖和任务交互的角度来看,这些任务是相互独立的。异步编程最常用于I/O读写。Hack使用async和await两个关键词支持异步编程。async声明异步函数。await会挂起一个异步函数的执行,直到await代表的异步操作的结果可以访问。await可以使用的函数的返回值为实现了Awaitable<T>的对象。

异步编程是一种编程的设计模式。它允许多个独立的任务协同工作,在同一线程内传递控制权。从最小依赖和任务交互的角度来看,这些任务是相互独立的。异步编程最常用于I/O读写。


Hack使用asyncawait两个关键词支持异步编程。async声明异步函数。await会挂起一个异步函数的执行,直到await代表的异步操作的结果可以访问。await可以使用的函数的返回值为实现了Awaitable<T>的对象。


<?hh

classFoo{}

classBar {

 publicfunctiongetFoo(): Foo {

   returnnew Foo();

 }

}

async functiongen_foo(int$a): Awaitable<?Foo> {

 if ($a === 0) {

   returnnull;

 }

 $bar = await gen_bar($a);

 if ($bar !== null) {

   return$bar->getFoo();

 }

 returnnull;

}

async functiongen_bar(int$a): Awaitable<?Bar> {

 if ($a === 0) {

   returnnull;

 }

 returnnew Bar();

}

gen_foo(4);

gen_foo()前有async关键字,因此它是一个异步函数。异步函数总是返回一个实现了Awaitable<T>的对象(通常具体的实现是WaitHandle<T>,不过几乎在所有场合都推荐使用Awaitable<T>接口。


调用gen_foo()会引入一些有趣的属性,这些都是异步函数特有的。异步函数可能会贪婪地执行异步函数体部分。调用gen_bar()首先返回一个Awaitable对象,这个对象在执行之中可能完成,也可能不完成。如果它没有完成,那么gen_foo()会挂起执行,否则gen_foo()会析构结果并继续贪婪执行。在await声明以外的执行不会被挂起。异步编程框架会记录所有应该完成的异步操作。

相关文章
|
存储 安全 文件存储
什么是NAS?探索无限存储的可能性
【4月更文挑战第21天】
11525 0
什么是NAS?探索无限存储的可能性
|
3月前
|
人工智能 数据可视化 物联网
《显卡 4090 就能跑!小白也能炼出私有大模型》
大模型微调是AI落地的关键技术,通过定向训练让通用模型在特定领域“从会到精”。本文详解微调原理、LoRA/QLoRA等高效方法,并提供评估与实操建议,助力新手快速上手,实现低成本、高精度的模型定制。
475 4
|
存储 网络协议 网络安全
文件同步工具 - 本地搭建免费开源的Syncthing自动文件同步服务器【远程访问】
文件同步工具 - 本地搭建免费开源的Syncthing自动文件同步服务器【远程访问】
|
存储 Web App开发 缓存
CleanMyMac X安全吗?及优缺点测评简述
如果Mac 电脑经常卡机、死机、速度很慢,跳出“存储过满”等问题,那么就需要用到世界上最受欢迎的电脑清理软件之一CleanMyMac X,它提供免费试用版,会告诉您可以释放多少磁盘空间,使用更多功能的完整版更能优化和保护 Mac 计算机,让速度大大提升。网上对CleanMyMac X的评论有的超级正面,有的超级负面,甚至有的“专家”说它是流氓软件,然后我们从实际出发,在测评这款清理软件之后,我们100% 支持它,因为它真的效果好,确实比市面上任何Mac 清理软件好用,价格不是最便宜的,但值得拥有,它在清理文件、改善隐私、删除垃圾或恶意软件以及提高设备的使用寿命和保持性能方面创造了奇迹。
2835 0
|
3月前
|
人工智能 供应链 安全
OpenAI“后门”失守:一次钓鱼攻击如何撬动AI巨头的第三方供应链防线
2025年,一封伪造OpenAI邮件通过第三方分析平台Mixpanel发起精准钓鱼攻击,窃取员工凭证,导致部分API用户元数据泄露。事件揭示AI生态中供应链安全的脆弱性,攻击者借“最小权限”漏洞横向移动,获取地理位置、设备信息等敏感数据,凸显第三方风险与身份认证短板。从SolarWinds到Okta,此类攻击已成常态。应对需构建零信任架构,推行最小权限、MFA、无密码登录及自动化第三方风险监控。安全非附加功能,而是信任基石——一次钓鱼即可动摇用户信心,预防远胜补救。
258 7
|
4月前
|
存储 关系型数据库 MySQL
为什么MySQL索引结构是B+tree ?
MySQL采用B+树作为索引结构,因其非叶子节点仅存键值与指针,可存储更多键,降低树高,提升查询效率。数据集中于叶子节点并形成双向链表,支持高效稳定的范围查询。通常树高为2-3层,即可容纳上千万数据,显著优于二叉树或B树。
|
8月前
|
JSON API 数据格式
深度分析大麦网API接口,用Python脚本实现
大麦网为国内领先演出票务平台,提供演唱会、话剧、体育赛事等票务服务。本文基于抓包分析其非官方接口,并提供Python调用方案,涵盖演出列表查询、详情获取及城市列表获取。需注意非官方接口存在稳定性风险,使用时应遵守平台规则,控制请求频率,防范封禁与法律风险。适用于个人学习、演出信息监控等场景。
|
11月前
|
人工智能 弹性计算 运维
阿里云邀请您参加 2025 中国 Serverless 用户调查
阿里云邀请您参加 2025 中国 Serverless 用户调查
|
算法 网络协议 安全
HTTP/2 协议的缺点是什么?
HTTP/2 协议的缺点是什么?
626 13
|
JavaScript NoSQL 中间件
《Node.js后端修炼手册》——揭秘服务器搭建与部署上线的生死时速,让你一战成名!
【8月更文挑战第27天】本文详细介绍如何从零开始利用Node.js构建后端服务器并部署至生产环境。首先,通过简易步骤搭建基础服务器,包括环境安装与配置。接着,引入Express框架优化路由与中间件管理,提升开发效率。随后,利用Mongoose实现MongoDB数据库连接,增强数据交互能力。为保证系统稳定性,文中还讲解了错误处理机制。最后,通过PM2等工具部署应用至生产环境,确保高效运行。本教程辅以示例代码,帮助读者快速掌握Node.js后端开发全流程。
911 2

热门文章

最新文章