写点什么

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:382035
用户头像

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

关注

评论

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

跨架构编程不再难,英特尔机器编程工具迎来重磅更新

E科讯

1分钟解密:博睿大数据核心引擎Bonree Zeus六大优势

博睿数据

架构师训练营第 11 周课后练习

叶纪想

极客大学架构师训练营

腾讯大牛整合Java+spring5系统学习架构,神乎其技

小Q

Java 学习 编程 面试 spring 5

ONES 收购 Tower,五源资本合伙人对话两位创始人

万事ONES

项目管理 团队协作 ONES Tower 收购

架构设计之路-1

5加3彩票

架构师 代码规范

英特尔神经拟态生态系统发展和研究的最新进展

E科讯

《技术男征服美女HR》—Fiber、Coroutine和多线程那些事

太白上仙

Java 程序员 面试 后端 多线程

加码线下,新荣耀“破题”场景经济

脑极体

新闻|Babelfish使PostgreSQL直接兼容SQL Server应用程序

PostgreSQLChina

数据库 postgresql 开源

智慧公安扫码一键定位报警系统搭建

t13823115967

智慧公安 智慧公安扫码 一键定位报警系统搭建

面试无忧:源码+实践,讲到MySQL调优的底层算法实现

996小迁

Java 架构 面试

谁能阻止世纪互联星光?2020年第11期北京机房网络质量评测数据排行榜发布

博睿数据

架构师训练营第 1 期 -week11

习习

微软最强 Python 自动化工具开源了!不用写一行代码!

星安果

Python 微软 自动化 自动化测试 playwright

javascript开发后端程序的神器nodejs

程序那些事

Java 后端 nodejs koa 程序那些事

关于binlog,这个参数能不能用?

Simon

MySQL Binlog

即使不会node.js,拖拽就可完成数据的可视化展示

华为云开发者联盟

node.js 数据 可视化

一个真正0基础小白学习前端开发的心路历程

华为云开发者联盟

开发 开发小白 0基础

ONES 收购知名协作工具 Tower

万事ONES

团队协作 高效 研发管理工具 收购 资讯

英特尔推动集成光电的发展,用于数据中心

E科讯

IntelliJ IDEA 2020.3正式发布,年度最后一个版本很讲武德

YourBatman

IDEA 新特性 2020.3

【技术分享】浅谈RTC及Agora RTC SDK集成介绍

Hanson

给你一个亿的keys,Redis如何统计?

不才陈某

redis

英特尔发布第二代Horse Ridge低温量子控制芯片

E科讯

国产电子表格Luckysheet后台也开源了!支持在线协作,一键docker私有部署

奇异石榴果

Java Excel SpreadJS 表格控件

Linux平台中调试C/C++内存泄漏方法 (腾讯和MTK面试的时候问到的)

linux大本营

c++ Linux 后台开发 架构师

《前端实战总结》之使用CSS3实现酷炫的3D旋转透视

徐小夕

css3 大前端 CSS小技巧

性能压测

jorden wang

想了解任务型对话机器人,我们先从自然语言理解聊起

华为云开发者联盟

人工智能 机器人 自然语言

挑战赛 | 话题王者VS互动先锋(第一季)

InfoQ写作社区官方

话题讨论 热门活动

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