50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

WinRT:超越 async 与 await

  • 2012-05-21
  • 本文字数:603 字

    阅读完需:约 2 分钟

新的 Windows Runtime(WinRT)的目标之一就是为开发者进行异步编程提供更好的支持。借助于异步操作,程序可以在其他操作(诸如文件 I/O 或是网络通信)尚未结束的情况下保持对用户的响应。这种响应性对于大多数用户应用来说都是很有用的,包括触摸界面,用户在这种情况下希望手势能有快速的反馈。

为了实现这个目的,C#与 Visual Basic 程序员通过“ await/async ”关键字来实现异步操作,同时又不会造成程序控制流的过分复杂。遵循 async API 调用的程序可以依靠编译器在发出调用时自动将上下文切换至原来的状态。近日,来自微软的 Stephen Toub详细解释了该过程的工作原理。

编译器内部重写了标记为async 的方法以通过状态机将其实现出来。当程序员将某条语句标记为“await”,编译器就可以插入标记,通过这些标记,编译器能够知晓可以在何处挂起与继续方法的执行,在这个过程中是不需要用到锁的。

Toub 说到:

在等待某个尚未完成的异步操作时,编译器生成的代码能够确保与该方法相关的所有状态(比如说局部变量等)都会被打包并保存到堆上。接下来,函数返回到调用者,这样其运行的线程就可以做其他事情了。当稍后等待的异步操作完成时,方法的执行又会使用之前保存的状态继续下去。

Toub 又继续介绍了一些场景,程序员会看到比“await”所提供的更为强大的控制。在这种情况下就需要通过“AsTask”方法来为进度报告提供支持或是支持多点继续。

查看英文原文: Going Beyond async and await On WinRT

2012-05-21 10:382070
用户头像

发布了 88 篇内容, 共 272.2 次阅读, 收获喜欢 9 次。

关注

评论

发布
暂无评论
发现更多内容

高性能网络SIG月度动态:自研 IPPROTO_SMC 贡献 Linux 社区,virtio 增加多项优化

OpenAnolis小助手

高性能网络 龙蜥社区 龙蜥社区SIG

晶澳太阳能选择 TDengine 加强数据管理,助力实现双碳目标

TDengine

数据库 tdengine 时序数据库

淘宝商品详情API接口:商品属性与评论数据综合获取,助力市场研究

技术冰糖葫芦

API 安全 API 开发 API 策略 pinduoduo API

一文读懂Lumoz节点的潜力与收益,加密收益新范式

加密眼界

迁移方案详解 | 使用YMP从异构数据库迁移到YashanDB

极客天地

《SelectDB 新一代日志存储分析平台解决方案》白皮书重磅发布|立即下载

SelectDB

大数据 数据分析 实时数仓 解决方案 日志处理

Leangoo一站式敏捷研发协同平台,助力敏捷企业高效协同

顿顿顿

敏捷开发 敏捷工具 scrum工具

京东商品详情API:解锁电商数据的金钥匙

Noah

百度二面,有点小激动!附面试题

王磊

Java

开始报名啦!智能可观测运维技术 MeetUp 议题硬核来袭

OpenAnolis小助手

操作系统 系统运维 可观测运维技术

Flutter中的异步和多进程

凌宇之蓝

软件测试学习笔记丨redis的穿透、击穿、雪崩有什么不同点?

测试人

redis 软件测试 测试开发

2024青岛国际软件及信息技术博览会(CICE电博会)

AIOTE智博会

软件博览会 软件展会 软件展 软件展览会

小程序与小组件技术和场景介绍解析

Onegun

小程序 finclip 小程序组件

WinRT:超越async与await_C#_Jeff Martin_InfoQ精选文章