如何 0 成本启动全员 AI 技能提升?戳> 了解详情
写点什么

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

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

关注

评论

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

详解工作流框架Activiti的服务架构和组件

华为云开发者联盟

工作流 工作流引擎 BPM Activiti BPMN

做一款互联网内容平台,到底要懂多少AI?

百度开发者中心

AI

滚雪球学Python系列,真能学会Python!

梦想橡皮擦

内容合集 签约计划第二季

mPaaS 月度小报|魔方卡片(Cube)公测,十个卡片模板任意使用

蚂蚁集团移动开发平台 mPaaS

小程序 消息推送 移动开发 API网关 cube

Go语言学习查缺补漏ing Day2

恒生LIGHT云社区

Go 编程语言

同态加密实现数据隐私计算,能让你的小秘密更加秘密

华为云开发者联盟

数据 加密 同态加密 联邦计算 数据隐私计算

给弟弟的信第1封|兄弟是父母带给我们最好的礼物

大菠萝

28天写作

模运算和与运算的一点儿简单思考

LSJ

位运算 二进制

JVM中的对象及引用

Ayue、

技术专题合集

架构实战营 模块七作业

felix

「架构实战营」

青藤解密:72%客户容器规模>100个,[镜像安全]谁来保护?

青藤云安全

镜像安全

火山引擎+焱融 YRCloudFile,驱动数据存储新增长

焱融科技

云计算 分布式 云原生 高性能 文件存储

打造基于 PostgreSQL/openGauss 的分布式数据库解决方案

SphereEx

数据库 开源 分布式数据库 ShardingSphere SphereEx

复杂场景,从OpenTSDB迁移到TDengine的最佳实践

TDengine

数据库 tdengine

模仿UP主,用Python实现一个弹幕控制的直播间!

Zhendong

Python

软件工程师年满 40 岁,下一步怎么走?|本周话题

InfoQ写作社区官方

生涯规划 个人成长 职业规划 话题讨论

百度智能客服斩获 “金音奖—中国最佳客户联络中心技术与解决方案奖”

百度大脑

人工智能 智能客服

等保工作五大误区汇总,让你更懂等保!

行云管家

网络安全 等保 等级保护

HBase 和 Hive 的差别是什么,各自适用在什么场景中

编程江湖

大数据

CIO如何制定低代码/无代码战略

BeeWorks

开始读 Go 源码了

AlwaysBeta

golang 源码 源码阅读 源码剖析 Go web

面对行业难题,华为云邀请物联网全行业拿出“亮剑”精神

华为云开发者联盟

IoT 华为云 LiteOS HarmonyOS IoT边缘

MySQL「 Every derived table must have its own alias」1248 错误修复法

蒋川

数据库 MySQL 运维 MySQL 数据库

如何在 Flutter 中设置背景图像【Flutter专题15】

坚果

flutter 28天写作 签约计划第二季 12月日更

什么是云计算?云计算特点是什么?

行云管家

云计算 公有云 混合云 云资源

【Java】代码重构时,为什么禁止在方法内对对象类型的入参赋值

恒生LIGHT云社区

Java 代码规范 java代码规范

前端开发怎么学习才能更快的提高学习效率

@零度

大前端

大数据开发技术应该怎么学习入门才好

@零度

大数据

Redis架构实战:高并发情况下并发扣减库存

编程江湖

java编程

清空数组的几个方式

编程江湖

大前端

莫要寻找可能不存在的答案

FunTester

学习 解决方案 自学 FunTester 思路

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