写点什么

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

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

关注

评论

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

架构训练营模块一作业

沈益飞

「架构实战营」

Golang Gin 框架之中间件(六)

liuzhen007

28天写作 12月日更

Prometheus Exporter (十五)PostgreSQL Server Exporter

耳东@Erdong

Prometheus postgres 28天写作 exporter 12月日更

一图看懂软件缺陷检查涉及的内容

Tom(⊙o⊙)

软件安全 静态代码检查

在线蚂蚁文,菊花文生成工具

入门小站

工具

不懂这五项权力,做什么项目经理

Ian哥

项目管理 28天写作 五项权力

2.《重学JAVA》--初探JAVA

杨鹏Geek

「Java 25周年」 28天写作 12月日更

请清晰沟通选题-从策略层面定义技术演讲

将军-技术演讲力教练

架构实战营 - 毕业设计

en

#架构实战营

用错误的动作,让正确的事情发生(3/28)

赵新龙

28天写作

Prometheus Exporter (十六)Microsoft SQL Server Exporter

耳东@Erdong

microsoft Prometheus 28天写作 exporter 12月日更

『新华报』一分飞艇怎么操作的[手机乐乎]

天马行空

一分飞艇怎么操作的

爸爸想对儿子说的话

Tiger

28天写作

『新华报』回血上岸导师[手机乐乎]

天马行空

回血上岸导师

linux重要的目录之proc和dev目录

入门小站

Linux

现实扭曲力场引论

Justin

群体心理学 28天写作 玄学

『新华报』飞艇分析工具[手机乐乎]

天马行空

飞艇分析工具

云原生:K8s控制器汇总(附视频教程+PDF)

息之

k8s Node Deployment statefulset cronjob

Linux常用命令-如何操作文件?

Java个体户

Linux

[Pulsar] JWT认证的原理

Zike Yang

Apache Pulsar 12月日更

《深入理解JVM虚拟机》第三章 垃圾收集器与内存分配策略

Joseph295

举重若轻流水行云,前端纯CSS3实现质感非凡的图片Logo鼠标悬停(hover)光泽一闪而过的光影特效

刘悦的技术博客

CSS html css3 LOGO HTML5, CSS3

『新华报』北京飞艇赛车微信群[手机乐乎]

天马行空

北京飞艇赛车微信群

新知识的地图绘制

Nydia

圣迪

架构实战营 - 毕业总结

en

#架构实战营

『新华报』秒速飞艇开奖[手机乐乎]

天马行空

秒速飞艇开奖

『新华报』重庆试试彩官方平台[手机乐乎]

天马行空

重庆试试彩官方平台

mongodb出现重复id怎么办?

喵叔

28天写作 12月日更

趣谈“链路追踪组件” Skywalking 和 PinPoint

悟空聊架构

链路追踪 Skywalking 28天写作 悟空聊架构 12月日更

复制流动改变世界

mtfelix

28天写作

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