写点什么

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

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

关注

评论

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

week02

ルンルン

第11周作业

paul

训练营 - 第11周

袭望

腾讯牵头零信任产业标准工作组正式发布零信任联盟标准

架构师训练营 11 周作业

郎哲158

架构师训练营 2 期 Week07 总结

Week_11 作业

golangboy

极客大学架构师训练营

第十一周 学习总结

熊桂平

极客大学架构师训练营

从一次不佳的小组讨论展开

sherlockq

KMP —— 字符串分析算法

三钻

算法 大前端 KMP

第 07 周 性能压测(响应时间和吞吐量变化)

Airship

极客大学架构师训练营

密码学,心底的凉暖

X.F

密码学

腾讯iOA与绿盟、天融信完成产品互认证,助力零信任市场协同发展

架构师训练营第 1 期 - 第 10 周 - 命题作业

wgl

话题讨论 | 遇到的印象最深的开源项目

soolaugust

话题讨论

8张图带你了解大型应用架构演进历程

Silently9527

架构 互联网架构设计

【架构师训练营 1 期】第十一周作业

诺乐

话题讨论 | 2021要来了,你对未来的一年有什么期待

soolaugust

话题讨论

Week_11 总结

golangboy

极客大学架构师训练营

话题讨论 | 2020就要结束了,你最想对自己说的是什么

soolaugust

话题讨论

话题讨论 | 未来十年,你认为哪门语言将要脱颖而出

soolaugust

话题讨论

CSS flex 排版与动画 — 重学 CSS

三钻

CSS 大前端 排版 Flex

与前端训练营的日子 --Week06

SamGo

学习

week7-作业二:根据当周学习情况,完成一篇学习总结

未来已来

第十一周 作业

熊桂平

极客大学架构师训练营

架构师训练营第 11 周学习笔记

郎哲158

Spring 源码学习 08:register 注册配置类

程序员小航

Java spring 源码 源码阅读

week7-性能优化

未来已来

【架构师训练营 1 期】第十一周学习总结

诺乐

ShardingSphere RAW JDBC 分布式事务 Narayana XA 代码示例

Java 数据库 分布式事务 ShardingSphere

架构训练营第七周作业

一期一会

性能测试 Go 语言

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