本文共 994 字,大约阅读时间需要 3 分钟。
C#中的async/await语法已经得到了开发者们的广泛接受,但现在开发者们提出了新的要求。他们希望能够通过一种类似于“yield return”的语法从异步函数中返回多个值。在关于C# 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/