一个代码示例说明了async / await和Reactive(Rx)扩展的范例之间的区别?

两个系统。 .NET的react native扩展和新的C#5.0(.NET 4.5) async/await追求(或基于) future和promises构造范式(方法)。

你能给出(*)最简单的C#代码示例来说明它们之间的区别吗?

(*)
没有I / O,互联网或数据库连接是否可能?

更新:
好吧,如果以前似乎回答了这个问题,让我重新制定一下。
为什么在使用本机.NET Iobservable / IObserver + await / async时会添加并开始使用.NET的Reactive(Rx)扩展?

有什么可能的例子说明Rx会在没有Rx的情况下做出同样更笨拙或效率更低的东西(即只使用原生的.NET Iobservable / IObserver + await / async方法)?

Future / Promise范例通常用于在未来返回单个值。 也许需要一些繁重的计算或IO,因此无法保证及时同步返回。

Rx(以及通过代理IObserver / IObservable接口)是可观察序列的范例。 正如同步方法可以返回单个值(int)一样,它也可以返回带有一个值的IEnumerable 。 将此与异步世界进行比较, Task可以返回单个int值, IObservable可以返回只有一个int值的序列。

因此,如果您想要使用Task返回一系列值,则必须创建某种延续,或者返回一个集合/数组/值列表作为T例如Task 。 然而,这意味着您可以获得全部或非全部值。

Task / Task也是一种具体类型,其中Rx使用接口从实现中抽象出来。 我发现这有助于unit testing。 但是,在使用任务进行测试时, TaskCompletionSource可以帮助避免隐式并发。

最后,除了Rx处理值序列(不是单个值)的主要区别之外,Rx还设计为与LINQ一起使用,以提供查询和组合优势,这些优点似乎与序列非常兼容(在静止状态下,如IEnumerable ,或像IObservable那样的运动。

最终,这些是针对略有不同的工作的不同工具。 有一些重叠,所以你有时可以使用一个来做另一个更好的。 具体来说,我认为Task更擅长组合异步工作单元(这样做,然后执行此操作,然后执行此操作),其中Rx更适合一起编写事件序列(当此事件发生时,使用数据执行此操作)从这个其他事件)。

他们不是互相排斥的。 主要决定因素是您将来会有一个结果还是将来会有多个结果。

http://blogs.msdn.com/b/rxteam/archive/2012/03/12/reactive-extensions-v2-0-beta-available-now.aspx

http://sofzh.miximages.com/c%23/0815.image_5F00_thumb_5F00_59BBA077.png

我喜欢Reactive文档中的表格: http : //reactivex.io/intro.html

我有自己的想法,我添加了第三维非组合/可组合。

非可组合:

  • 单项/同步 :function
  • 多项/同步 :可迭代
  • 单项/异步 :异步function
  • 多项/异步 :可观察

可组合:

  • 单项/同步 :高阶函数
  • 多项/同步 :linq / ramda / java.util.stream
  • 单项/异步 :未来/承诺
  • 多项/异步 :rx observable

请注意,根据实现情况,您可以拥有可以同步或异步执行的future和rx observable,具体取决于您尝试使用它们是同步还是异步