QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

C#的未来:异步序列

  • 2015-05-06
  • 本文字数:713 字

    阅读完需:约 2 分钟

C#中的 async/await 语法已经得到了开发者们的广泛接受,但现在开发者们提出了新的要求。他们希望能够通过一种类似于“yield return”的语法从异步函数中返回多个值。在关于 C# 7 的一条新的提议中,这一功能被称为“异步序列”。

这条提议的提出者希望能够使用以下两种模式:

  • IObservable,这是 Reactive Extensions(Rx)的基础,后来成为了.NET 4.0 中的一部分
  • IAsyncEnumerable,这是由 Interactive Extensions(IX)项目所引入的类型,也用于 Entity Framework 7 中。

定义生产者

HaloFour 写道:

从一个序列的生产者的角度来看,这两种模式的 yield return 行为将有一些细微的差别。IObservable可能会立即继续执行,而 IAsyncEnumerable会等到下一次调用 MoveNext() 方法时才会继续执行。

对于 push 模型来说,使用 Observable.Create 方法就足够了,这点已经基本为开发者所接受。而基于 IAsyncEnumerable的 pull 模型实现起来就要麻烦许多。因此,这种时刻某种异步版本的迭代函数以及“yield return”语句就能够大显身手了。

定义消费者

HaloFour 继续写道:

从消费者的角度来说,这两种模式的行为应当是相同的。Observable.ForEach 允许并发执行某些操作,而我认为允许 foreach 方法体运行多个并发线程的方式是非常不直观的(假设派发这些线程时没有使用 SynchronizationContext)。如果它的实现类似于 await 的工作方式,那么可以让某种中间代码(例如 SequenceAwaiter)处理从某个 IObservable获得结果缓冲的细节,或者使用某个扩展方法直接将其转型为 IAsyncEnumerable

关于这个语法还没有提供任何示例,但估计它看起来应该类似于这样:

await foreach (var item in AsyncSource)

查看英文原文: C# Futures: Asynchronous Sequences

2015-05-06 08:361806
用户头像

发布了 428 篇内容, 共 184.4 次阅读, 收获喜欢 39 次。

关注

评论

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

uni-app跨端开发H5、小程序、IOS、Android(八):理解uni-app生命周期

黑马腾云

小程序 uni-app ios android H5

我一怒之下写了个抄袭举报工具!只因一觉醒来我的文章被多个平台抄袭!

1_bit

Python selenium 签约计划 文本分析 文章查重

聪明人的训练(十一)

Changing Lin

4月日更

Linux rm 命令

一个大红包

4月日更

【LeetCode】丑数 IIJava题解

Albert

算法 LeetCode 4月日更

【音视频】手把手带你实现超实用实时音视频工具

轻口味

android 音视频 WebRTC 移动端 OpenGL ES

干货版“测试小品”欢乐场景

清菡软件测试

自动化测试

「免费开源」基于Vue和Quasar的前端SPA项目crudapi后台管理系统实战之动态表关系管理(六)

crudapi

Vue crud crudapi quasar 表关系

和面试官简单聊聊 Elasticsearch

escray

elasticsearch elastic 4月日更 技术编辑能力考核

自己挖的坑,自己填|靠谱点评

无量靠谱

机器学习水水笔记之——世界是积木吗?

Nydia

签约计划

移动端混合开发选型方案分析

花花

移动开发 移动端 签约计划

从运营、产品和技术,多角度思考电商的营销体系建设

邴越

电商营销 优惠券

线程池的引入和实践案例分享

小诚信驿站

线程池 线程池工作原理

一文带你了解如何排查内存泄漏导致的页面卡顿现象

零一

chrome 大前端 浏览器 内存泄露 问题处理

Java检查异常、非检查异常、运行时异常、非运行时异常的区别

Sakura

4月日更

Prometheus官方文档Querying[三]function

卓丁

手把手教你基于Prometheus搭建监控告警系统

Java全栈封神

云原生 Prometheus 监控告警

美团面试题:String s = new String("111") 会创建几个对象?

Java小咖秀

Java 面试 string java对象

从零开始带你打开批处理大门

xiezhr

doc 批处理 cmd

如何设计一款用户想要的产品——“Design Thinking”培训笔记

gavin

产品设计 design thinking

100万级车辆数据监控的hadoop大数据架构探索与实践

黑马腾云

大数据 flink hadoop 分布式 车联网

区块链国富论——财富不是物,而是全球信用共识

CECBC

黄金交易

ElasticSearch 如何使用 ik 进行中文分词?

程序员历小冰

中文分词 elasticsearch ik 全文搜索

如何从零搭建技术团队

石云升

团队建设 28天写作 职场经验 管理经验 4月日更

自古彭城列九州 龙争虎斗几千秋|靠谱点评

无量靠谱

这些相见恨晚的命令行工具,你用过几个?

wangkx

bash Linux Tool

声网 Agora 初体验

若尘

声网 Agora

一篇文章带你彻底了解MySQL各种约束

若尘

MySQL 数据库 约束 4月日更

ffmpeg完美实现解封装操作!

txp

音视频

2021 年带你漫游语音识别技术

清秋

人工智能 语音识别 智能音箱 签约计划 4月日更

C#的未来:异步序列_C#_Jonathan Allen_InfoQ精选文章