NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

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

关注

评论

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

面经手册 · 第5篇《看图说话,讲解2-3平衡树「红黑树的前身」》

小傅哥

Java 数据结构 小傅哥 红黑树 2-3树

KPI考核存在的问题

石云升

读书笔记 考核 KPI 数字化管理

16张图入门Nginx——(前端够用,运维入门)

执鸢者

nginx 运维 大前端

python必备知识总结

我是程序员小贱

SpringBoot系列(八):SpringBoot 中的事务处理

xcbeyond

Java 微服务 事务 springboot

SICP,我的函数式编程启蒙书

Kurtis Moxley

读书 函数式编程

二叉树-四种遍历方式的 Java 实现

多选参数

二叉树 遍历

异常处理的那些事儿

松花皮蛋me

Java 设计模式

ARTS打卡 第12周

引花眠

微服务 ARTS 打卡计划

年轻的樵夫哟,你掉的是这个免费 8 核 4G 公网服务器,还是这个随时可用的 Docker 实验平台?

newbe36524

Docker 微服务 .net core ASP.NET Core

spark学习之IDEA配置spark并wordcount提交集群

我是程序员小贱

[python基础]2 python数据类型上篇

我是程序员小贱

[python基础]3 python数据类型下篇(不得不看的字典,列表大总结)

我是程序员小贱

ARTS Week12

时之虫

ARTS 打卡计划 arts

SpringBoot系列(七):SpringBoot 中使用Redis缓存

xcbeyond

Java redis 微服务 springboot

ARTS 07 - 使用 supervisor 配置 ngrok 内网穿透为守护进程

jerry.mei

算法 练习 ARTS 打卡计划 ARTS活动 内网穿透

全面剖析PHP-FPM+Nginx通信原理

书旅

nginx 正向代理与反向代理 PHP-FPM

如何有效提高技能?我推荐《刻意练习》

老胡爱分享

个人成长 练习

Nginx之反向代理

xcbeyond

nginx 反向代理 代理

Java统一异常处理(配置文件集中化定义)

xcbeyond

Java 架构 后端 统一异常

HTTP方式文件分片断点下载

xcbeyond

Java 断点续传 下载 Range

Docker 禁止美国“实体清单”主体使用,Docker 开源项目应不受影响

程序员生活志

Docker 互联网热点

最受 IT 公司欢迎的 30 款开源软件

程序员生活志

开源

蓝绿部署、金丝雀发布(灰度发布)、AB测试

看山

微服务 持续集成

了解JS压缩图片,这一篇就够了

华为云开发者联盟

Java html5 vue.js 大前端 npm

架构到底是什么?

架构精进之路

架构

螺旋矩阵算法,臭代码解析,微服务架构 Service Mesh 服务网格 RPC 协议实现原理 Dubbo 通讯协议,John 易筋 ARTS 打卡 Week 13

John(易筋)

ARTS 打卡计划

这些年看过的Linux相关书籍推荐

我是程序员小贱

准时下班的秘密:集成 GitLab && JIRA 实现自动化工作流

Phoenix

团队协作 研发效能

IT人为什么难以拿高薪?

看山

成长 随笔杂谈 薪资 心灵鸡汤

如何选择:Bootstrap Or Layui

引花眠

bootstrap layui

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