最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

一切皆可等待

  • 2013-01-14
  • 本文字数:815 字

    阅读完需:约 3 分钟

Lucian Wischik 发布了一系列博客文章,阐述了如何在各种情况下(从等待动画完成到捕获命令行程序的输出结果)使用 Await。

如何等待Storyboard ”这篇文章包含了基本的模式。其核心为TaskCompletionSource。当Storyboard 的Completed 事件被触发时,附加的事件处理程序使用TaskCompletionSource 将结果传递给Task。

这样我们就可以使用“Await storyboard1.PlayAsync()”这样的语法了。如果想再短点儿,只是使用“Await storyboard1”,可以构建一个扩展方法GetAwaiter,并让它返回一个TaskAwaiter。编译器会查找具有该名称的方法,并重写相关的代码。

要想看看更复杂的基于事件处理程序方法的示例,可以看看“如何等待MediaElement ”。在这篇文章中作者创建了两个函数,OpenAsync 和PlayAsync,并讨论了如何以干净的方式支持错误处理。

Lucian 的 RunCommandLineAsync 支持从命令行程序中读取标准输出流和标准错误流。由于与这两种流以及输入流的交互问题,要实现这一点并不像看上去那么容易。Lucian 解释了如何将多任务应用与此:

让“RedirectStandardInput/Output/Error”工作的精确方式取决于我们正在启动的进程的内部细节。我们能够确定的是,(1)在关闭 StandardInput 之前,进程可能还没完成;(2)在可以向 StandardInput 写数据之前,可能需要从 StandardOutput/StandardError 读取数据;(3)在可以从 StandardOutput/StandardError 读取更多的数据之前,可能需要向 StandardInput 写入更多的数据。这些约束意味着必须同时启动“tin/tout/terr”这三个任务,并用 Task.WhenAll() 来等待。

要了解 Await 和 GetAwaiter 如何在编译器中交互,请阅读 Stephen Toub 的文章“等待一切”。

查看英文原文 How to Await Just About Anything


感谢杨赛对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2013-01-14 05:071190
用户头像

发布了 59 篇内容, 共 22.6 次阅读, 收获喜欢 3 次。

关注

评论

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

常用推荐算法(50页干货)

阿里技术

[干货]深度学习即将攻陷的下一个领域:NLP——ACL2016优秀论文解读(上篇)

阿里技术

王坚:世界上最遥远的距离是红绿灯与交通监控摄像头的距离

阿里技术

2016年双11:新技术、新能源的第一战场

阿里技术

建议收藏!HDC2021 HarmonyOS技术分论坛干货解读文章大汇总

HarmonyOS开发者

HarmonyOS 技术专题合集

数字经济发展引热议,博鳌亚洲论坛第二届科创大会区块链分论坛开幕在即

时空云

区块链 创新 科技 元宇宙

SpringOne Platform 2016参会分享

阿里技术

阿里CTO张建锋:一根高尔夫球杆背后的数据智能[演讲全文]

阿里技术

架构实战营 模块六作业

felix

「架构实战营」

淘宝首页“有一套”

阿里技术

Rust 元宇宙 2 — 邻居

Miracle

rust 元宇宙

阿里一年建了两座世界级数据中心,怎么做到的

阿里技术

[干货]基础机器学习算法

阿里技术

马云:“电子商务”将消失 新五通一平将引领未来

阿里技术

最前沿人工智能,助力双11搜索推荐技术再升级——深度增强学习大规模在线应用

阿里技术

NQI质量基础设施服务云平台建设,NQI一站式线上平台开发

电微13828808271

一个前端的自我修养

阿里技术

架构实战营-模块五作业

无名

架构实战营 「架构实战营」

精读《高效 javascript》

CRMEB

基于深度学习的智能问答

阿里技术

新零售时代的双11移动技术亮剑 ——2016年阿里移动平台新技术解读

阿里技术

阿里巴巴数据中心获两项DCD大奖

阿里技术

当学霸们跑步的时候他们在跑什么

阿里技术

智慧警务指挥系统搭建,公安合成作战平台开发

电微13828808271

[下篇]深度学习即将攻陷的下一个领域:NLP——ACL2016优秀论文解读(干货)

阿里技术

[干货]语音技术最新进展-Interspeech总结

阿里技术

阿里科学家凭集成学习技术获CIKM Cup竞赛冠军

阿里技术

设计微博系统中”微博评论“的高性能高可用计算架构

奔奔

TypeScript 之条件类型

冴羽

JavaScript typescript 翻译 大前端 进阶

普华永道:阿里巴巴研发投入领跑中国上市公司

阿里技术

Rust 元宇宙 1 —— 创世纪

Miracle

rust 元宇宙

一切皆可等待_语言 & 开发_Jonathan Allen_InfoQ精选文章