写点什么

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

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

关注

评论

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

面试官问:JS的this指向

若川

JavaScript 前端 前端开发

一种低成本增长私域流量,且维护简单的方法

Geek_99967b

小程序 电商

毕业总结

小虾米

「架构实战营」

SpringCloud - Feign核心源码解析

码农参上

微服务 SpringCloud spring 源码

fastposter v2.8.4 发布 电商海报生成器

物有本末

海报生成器 电商海报 海报生成 图片合成

Scala 基础 (三):运算符和流程控制

百思不得小赵

scala 大数据 6月月更

在IDEA配置Tomcat你GET到了吗

迷彩

调试 IDEA tomcat构建 开发工具 Web 6月月更

直播带货平台包含了直播和娱乐模块,你知道是什么吗?

开源直播系统源码

软件开发 直播带货系统

智联招聘基于 Nebula Graph 的推荐实践分享

NebulaGraph

知识图谱 Nebula Graph

JavaScript 对象所有API解析

若川

JavaScript 前端 前端开发

设计电商秒杀系统

小虾米

「架构实战营」

Fabric.js 笔刷到底怎么用?

德育处主任

canvas 前端可视化 画布 FabricJS 6月月更

行业分析| 快对讲,楼宇对讲

anyRTC开发者

音视频 快对讲 语音对讲 视频对讲 楼宇对讲

2022中国信通院首届业务与应用安全发展论坛成功召开!

中国IDC圈

Ubuntu下安装OpenJDK10

程序员欣宸

Java Openjdk 6月月更

如何系统学习LabVIEW?

不脱发的程序猿

​LabVIEW LabVIEW机器视觉 ​LabVIEW工业控制 ​LabVIEW单片机 ​LabVIEW开发技巧

Prometheus 2.35.0 新特性

耳东@Erdong

release Prometheus 6月月更

一种跳板机的实现思路

vivo互联网技术

权限 跳板机 PAM机制

《运营之光3.0》全新上市——跨越时代,自我颠覆的诚意之作!

博文视点Broadview

setInterval、setTimeout和requestAnimationFrame

源字节1号

软件开发

如何使用 DataAnt 监控 Apache APISIX

API7.ai 技术团队

后端 监控 APISIX 网关 DataAnt

使用 ABAP 操作 Excel 的几种方法

汪子熙

microsoft Excel Office SAP 6月月更

面试官问:JS的继承

若川

JavaScript 前端 前端开发

声网 VQA:将实时互动中未知的视频画质用户主观体验变可知

声网

人工智能 音视频

要搞清楚什么是同步,异步,串行,并行,并发,进程,线程,协程

乌龟哥哥

6月月更

面试官问:能否模拟实现JS的new操作符

若川

JavaScript 前端 前端开发

COSCon'22 讲师征集令

开源社

开源

OpenHarmony应用开发之二维码生成器

坚果

鸿蒙 OpenHarmony OpenHarmony 3.1 Release 6月月更

SpringCloud - Ribbon核心源码解析

码农参上

微服务 SpringCloud spring 源码

2022 开源软件安全状况报告:超41%的企业对开源安全没有足够的信心

SEAL安全

DevSecOps 开源安全 软件供应链 安全左移

web前端培训Node.js 如何连接到 PostgreSQL 数据库

@零度

node.js 前端开发

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