10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

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

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

关注

评论

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

Proxy下的Prepare透传,让GaussDB(for MySQL)更稳固,性能更卓越

华为云开发者联盟

数据库 后端 华为云 SQL语句 华为云开发者联盟

解密 deepin-IDE:如何实现简单灵活的调试技术?

nn-30

ide Linux 调试 操作系统 deepin

覆盖13个行业,数据分类分级标准汇编更新啦!(附下载)

极盾科技

数据分类分级

架构实战营 - 模块五作业

王朝阳

架构实战营

只需10分钟!ER图理论知识新手速学

职场工具箱

调用API接口获取淘宝商品数据:实践指南与代码解析

Noah

前端如何防止数据被异常篡改并且复原数据

不在线第一只蜗牛

前端 教程分享

使用Python调用API接口获取淘宝商品数据

Noah

区块链开发:区块链和物联网的融合

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

Java基础面试题【分布式】三 ZAB协议

派大星

分布式, Java 面试题

好用到哭!2024年值得你尝试的15款在线画图神器

职场工具箱

简单好用的Xliff文件编辑工具 Xliff Editor激活最新版

胖墩儿不胖y

Mac软件 文件编辑器

消息中间件(rocketMQ 和 kafka 区别)

红袖添香

kafka RocketMQ 消息中间件 分布式消息

Embedding技术与应用(3):Embeddings技术的实践应用

Baihai IDP

人工智能 深度学习 AI Embedding 白海科技

ARBT阿尔比特共识铸币模式系统开发源码搭建

l8l259l3365

OpenTiny Vue 组件库支持 Vue2.7 啦!

OpenTiny社区

开源 前端 Vue组件库

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