博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#的未来:异步序列
阅读量:7113 次
发布时间:2019-06-28

本文共 994 字,大约阅读时间需要 3 分钟。

C#中的async/await语法已经得到了开发者们的广泛接受,但现在开发者们提出了新的要求。他们希望能够通过一种类似于“yield return”的语法从异步函数中返回多个值。在关于C# 7的一条新的提议中,这一功能被称为“异步序列”。

\\

这条提议的提出者希望能够使用以下两种模式:

\\
  • ,这是Reactive Extensions(Rx)的基础,后来成为了.NET 4.0中的一部分\\t
  • ,这是由Interactive Extensions(IX)项目所引入的类型,也用于Entity Framework 7中。\

定义生产者

\\

HaloFour写道:

\\
\

从一个序列的生产者的角度来看,这两种模式的yield return行为将有一些细微的差别。IObservable\u0026lt;T\u0026gt;可能会立即继续执行,而IAsyncEnumerable\u0026lt;T\u0026gt;会等到下一次调用MoveNext()方法时才会继续执行。

\
\\

对于push模型来说,使用Observable.Create方法就足够了,这点已经基本为开发者所接受。而基于IAsyncEnumerable\u0026lt;T\u0026gt;的pull模型实现起来就要麻烦许多。因此,这种时刻某种异步版本的迭代函数以及“yield return”语句就能够大显身手了。

\\

定义消费者

\\

HaloFour继续写道:

\\
\

从消费者的角度来说,这两种模式的行为应当是相同的。Observable.ForEach允许并发执行某些操作,而我认为允许foreach方法体运行多个并发线程的方式是非常不直观的(假设派发这些线程时没有使用SynchronizationContext)。如果它的实现类似于await的工作方式,那么可以让某种中间代码(例如SequenceAwaiter)处理从某个IObservable\u0026lt;T\u0026gt;获得结果缓冲的细节,或者使用某个扩展方法直接将其转型为IAsyncEnumerable\u0026lt;T\u0026gt;。

\
\\

关于这个语法还没有提供任何示例,但估计它看起来应该类似于这样:

\\

await foreach (var item in AsyncSource)

\\

查看英文原文:

转载地址:http://wxmhl.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
制作Nginx控制脚本实现:service nginx restart|reload|stop|st
查看>>
MySQL 体系结构以及各种文件类型学习汇总
查看>>
服务器维护常用命令
查看>>
解决squid缓存错误页面的办法
查看>>
Zabbix 安装报错
查看>>
Java+Netty、Vue+Element-UI实现的即时通信应用 leo-im
查看>>
ListView divider margin
查看>>
java.网络抓包工具使用
查看>>
非递归实现中序遍历二叉树
查看>>
Android Eclipse 导入 AS Gradle AAR 库手册
查看>>
推荐算法
查看>>
分析,理解,优化Laravel
查看>>
说说安全狗服云的优势与不足
查看>>
pip 安装flask
查看>>
7.springboot --dubbo 了解
查看>>
HTML 教程
查看>>
一道受用终生的面试题,谁能给出最好的答案
查看>>
java 报表的计算公式
查看>>
EOF是什么?
查看>>