在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

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

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

关注

评论

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

java培训关闭流方法有顺序吗

@零度

JAVA开发 包装流

如何禁用XXE处理?

龙智—DevSecOps解决方案

漏洞扫描 代码安全 漏洞检测

平安普惠荆州分公司:警民齐心,共同抗疫

科技新消息

ETL调度软件TASKCTL核心调度节点安装

敏捷调度TASKCTL

kettle 调度引擎 ETL 任务队列 调度任务

netty系列之:netty中的自动解码器ReplayingDecoder

程序那些事

Java Netty 程序那些事 4月月更

状态机引擎在vivo营销自动化中的深度实践 | 引擎篇02

vivo互联网技术

服务器 状态机

都2022年了,HDFS为何还如此能战

华为云开发者联盟

大数据 hadoop hdfs 分布式文件系统 大数据存储

为什么做开源需要懂异步协作?

腾源会

开源 腾源会

盘点:阿里云上8款免费的开发者工具

阿里云云效

阿里云 开发者 云原生 开发者工具 研发工具

三高Mysql - 搭建“三高”架构之复制

懒时小窝

MySQL MySQL 高可用

脉冲能量|Committer 专访——李理:Apache Pulsar 项目“体验师”

Apache Pulsar

开源 云原生 Apache Pulsar Apache Pulsar 社区 运维‘

不写代码,带你徒手开发一个健康打卡应用

华为云开发者联盟

无代码 AppCube 应用开发 健康打卡 可视化编排

云效研发效能度量体系,如何展示和解读交付效能数据

阿里云云效

阿里云 运维 研发管理 研发效能 研发团队

直播预告|年营业额百亿的企业都在如何做数字化转型

云智慧AIOps社区

数字化转型 AIOPS 解决方案 智能运维

超nei卷!连黑客勒索软件团伙都开始谈客户体验…

龙国富

黑客 客户体验 drakside 客户至上

H5营销有什么优势?企业需要定制开发H5吗?

源字节1号

前端开发 后端开发 H5制作

无需编程,基于微软mssql数据库零代码生成CRUD增删改查RESTful API接口

crudapi

低代码 API crud crudapi 增删改查

CPUvsGPU:谁才是游戏和视频编辑的核心?

Finovy Cloud

人工智能 gpu cpu

净推荐值(NPS)完整行动指南

龙国富

客户体验 NPS 净推荐值 北极星指标 客户忠诚度

敲重点!这些更新将会影响HarmonyOS原子化服务上架

HarmonyOS开发者

HarmonyOS 原子化服务

企业知识管理的解决方案

小炮

知识管理 企业知识管理 企业知识管理工具

web前端培训开发者要掌握的CSS 技巧有哪些

@零度

CSS 前端开发

面试官:Redis的事务满足原子性吗?

码农参上

redis 事务 4月月更

模块八作业:设计消息队列存储消息数据的 MySQL 表格

王大胖

大数据培训spark SQL中count(*)和count(1)源码分析

@零度

大数据开发 spark SQL

Android C++系列:JNI常见问题

轻口味

c++ android 4月月更

怒肝 JavaScript 数据结构 — 栈篇(三)

杨成功

数据结构 4月月更

三高Mysql - 搭建“三高”架构之扩展与切换

懒时小窝

MySQL MySQL 高可用

10个商品图策略,引导亚马逊卖家提升客户购物体验

龙国富

电商 商品 亚马逊 客户体验

13个问题帮你选型 “客户体验管理SaaS平台”

龙国富

SaaS 选型 客户体验 CEM CXM

消息队列存储消息数据的MySQL表格设计

Geek_36cc7c

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