写点什么

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

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

关注

评论

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

Docker与虚拟化技术浅析第一弹之docker与Kubernetes

京东科技开发者

Docker Kubernetes k8s 虚拟机

图灵8月书讯 | 10 本新书上市,本本精选

图灵社区

新书推荐

呐,HTTP接口安全的八种对策送给你了

知识浅谈

HTTP API 8月月更

云原生(二十四) | Kubernetes篇之Kubernetes 配置

Lansonli

云原生 k8s 8月月更

文本纠错:提升OCR任务准确率的方法

合合技术团队

人工智能 文字识别 OCR 合合信息

如何应对软件可变性?这4种常用的方法肯定要知道

华为云开发者联盟

云计算 软件 后端

开源一夏 | 使用layui框架实战之栅格系统和菜单评分组件运用心得

恒山其若陋兮

开源 8月月更

算法之“杨辉三角”题解

掘金安东尼

算法 前端 8月月更

Kubernetes资源编排系列之五: OAM篇

阿里云大数据AI技术

运维 开放应用模型

云原生 SIG:关于 Koordinator 混部原理及最佳实践 | 第 43 期

OpenAnolis小助手

开源 云原生 混部 sig 龙蜥大讲堂

MobTech ShareSDK 高级接口及配置

MobTech袤博科技

android MobTech袤博科技 sharesdk

短视频软件开发:推荐算法没有想象的那么复杂

开源直播系统源码

直播系统 直播系统源码 短视频直播

GaussDB(DWS)如何实现实时,批量和交付式查询一站式开发

乌龟哥哥

8月月更

翻译|使用 StatefulSet 运行数据库应用

RadonDB

数据库 Kubernetes RadonDB

解决 NGINX LDAP 参考实施中的安全问题

NGINX开源社区

nginx HTTP 安全漏洞 ldap 身份验证

Kubernetes MetalLB 作为 Load Balancer下

CTO技术共享

[JS真好玩] 我帮掘金找到了一个小Bug,可利用该Bug增加专栏粉丝数

HullQin

CSS JavaScript html 前端 8月月更

Linux常用命令

楠羽

Rewind the PlanetScale Rewind | 拆解硅谷当红科技公司如何做 Product Marketing

Bytebase

Kubernetes MetalLB 作为 Load Balancer上

CTO技术共享

Go-Excelize API源码阅读(十九)——SetHeaderFooter

Regan Yue

Go 开源 源码解析 8月日更 8月月更

租金、物业费的催收困境,如何解决?

IT资讯搬运工

面试突击77:Spring 依赖注入有几种?各有什么优缺点?

王磊

Java 常见面试题

电商行业:全链路监测广告投放效果,用数据驱动业务增长

HarmonyOS SDK

分析 电商营销

英伟达首席科学家:深度学习硬件的过去、现在和未来

OneFlow

机器学习 深度学习 硬件

揭秘百度智能测试在测试分析领域实践

百度Geek说

测试 数据 用例

技术分享| anyRTC 8月更新迭代

anyRTC开发者

音视频 WebRTC 视频通话 实时消息 抓拍图片

何去何从的并行计算

博文视点Broadview

教你使用Jupyter可视化查询语句的语法树

华为云开发者联盟

人工智能

架构实战营模块五作业

zhihai.tu

公众版与政企版,这两款云电脑我都要!

天翼云开发者社区

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