写点什么

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

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

关注

评论

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

阿里巴巴中国站按关键字搜索商品 API 的调用频率限制是多少?

技术冰糖葫芦

API 开发

释放潜能:IT外包服务对业务增长的强大推动

Ogcloud

外包 IT 外包公司 外包项目 IT 运维

低代码如何降低门槛、快速交付、实现可持续IT架构?

树上有只程序猿

软件开发 低代码平台 JNPF

文心一言 VS 讯飞星火 VS chatgpt (149)-- 算法导论12.2 4题

福大大架构师每日一题

福大大架构师每日一题

开源 | Spark Commiter 深度解读:Apache Spark Native Engine

网易数帆

大数据 spark 开源 Gluten

11 | 排序(上):为什么插入排序比冒泡排序更受欢迎

鲁米

JNPF低代码开发平台高效赋能开发者

互联网工科生

开发者工具 低代码开发 JNPF

IT外包服务广泛应用于哪些行业?

Ogcloud

外包 IT 外包公司 外包项目 IT 运维

Spring Boot 项目代码混淆实战:保护代码安全,防止泄露

2023Q4 私有化版本发布,和鲸 ModelWhale 持续赋能大科研、高校教改的 AI for Science

ModelWhale

人工智能 云计算 数据分析 超算 私有化部署

人工智能与供应链行业融合:开启智能化供应链的新时代

不在线第一只蜗牛

人工智能 供应链 智能化

理解意图,加速迈向L4高度自智网络

鲸品堂

意图识别 自智网络 12 月 PK 榜

又添三位“信伙伴”,亚信安慧AntDB数据库与南京一鸣、广东鸿数、北京数见完成兼容互认

亚信AntDB数据库

数据库 AntDB AntDB数据库

华为亮相OpenInfra Days China 2023,分享开源基础设施的实践和技术展望

彭飞

“粤”见昇腾AI,昇腾AI开发者创享日·广州站即将开启

彭飞

想转行学计算机,但现在听说互联网裁员太严重?

代码生成器研究

如何转行互联网?

代码生成器研究

Java医院绩效考核系统源码支持二次开发

源码星辰

Java

Netty源码学习7——netty是如何发送数据的

不在线第一只蜗牛

学习 源码 Netty

分享一个LCD驱动框架

不在线第一只蜗牛

教程 开发框架 lcd

智能联动第三方告警中心,完美实现故障响应全闭环

观测云

人工智能 监控 智能告警

从HumanEval到CoderEval: 你的代码生成模型真的work吗?

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 代码生成大模型

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