C#的未来:异步序列_最新动态_新闻资讯_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 新闻资讯 > 最新动态 > C#的未来:异步序列

C#的未来:异步序列

 2015/5/7 2:14:35    程序员俱乐部  我要评论(0)
  • 摘要:英文原文:C#Futures:AsynchronousSequencesC#中的async/await语法已经得到了开发者们的广泛接受,但现在开发者们提出了新的要求。他们希望能够通过一种类似于“yieldreturn”的语法从异步函数中返回多个值。在关于C#7的一条新的提议中,这一功能被称为“异步序列”。这条提议的提出者希望能够使用以下两种模式:IObservable<T>,这是ReactiveExtensions(Rx)的基础
  • 标签:C# 未来 异步
class="topic_img" alt=""/>

  英文原文:C# Futures: Asynchronous Sequences

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

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

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

  定义生产者

  HaloFour 写道:

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

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

  定义消费者

  HaloFour 继续写道:

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

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

await foreach (var item in AsyncSource)

发表评论
用户名: 匿名