这两个系统。 无扩展.NET和新的C#5.0(.NET 4.5) async/await
追求(或者基于) 未来,并承诺结构范式(方法)。
你可以给(*)最简单的C#代码说明它们之间的区别的例子吗?
(*)
是否有可能没有I / O,网络或数据库连接?
更新:
好吧,让我重新制定,如果这个问题似乎是前回答。
为什么一个补充,并开始使用反应性(Rx)的扩展.NET,同时使用本地的.NET 的IObservable / IObserver + 等待/异步 ?
什么是什么人将进行的Rx缺少做做同样更笨拙或效率较低的Rx无(即只参与本机.NET的IObservable / IObserver +等待/异步方法)可能插图?
未来/无极范例通常被用于在未来返回一个值。 也许有一些繁重的计算或所需,因此为什么它不能保证是及时同步返回IO。
RX(并且由代理IObserver<T>
/ IObservable<T>
接口)是观察序列的一个范例。 正如一个同步方法可以返回一个值(INT),它也可能返回一个IEnumerable<int>
一个值。 比较这一个异步的世界, Task<int>
可以返回一个int
值IObservable<int>
可以返回一个序列只有一个int
值。
所以,如果你想与返回值的序列Task<T>
你就必须要么建立某种形式的延续,或返回值的集合/数组/列表T
如Task<int[]>
然而,这将意味着你得到的值的全部或无。
Task
/ Task<T>
也是一个具体类型,其中为Rx使用接口抽象你从实现。 我发现这在单元测试提供帮助。 TaskCompletionSource<T>
与任务测试时然而可以是有益的,以避免隐式并发性。
最后,除了是R x为处理值(不是单值)的序列的主要区别中,Rx还设计有LINQ合作,提供这似乎与序列很好地工作的查询和组成的利益(无论是在静止喜欢IEnumerable<T>
或在像运动IObservable<T>
最终,这些都是稍有不同的工作不同的工具。 有一些重叠,所以有时你可以使用一个做另一种是在什么好。 具体而言,我认为Task
是在作曲的异步工作单位一起更好的(这样做,那么做,那么做到这一点),其中为Rx是构成事件序列一起更好的(当这个事件发生时,此功能是数据从这个其他事件)。
我喜欢无文档中的表格: http://reactivex.io/intro.html
我有我自己拿就可以了,其中我添加了第三个维度非分解性/可组合。
Non-composable:
| Single Item | Multiple items
------|----------------|----------------
Sync | Function | Iterable
Async | Async function | Observable
Composable:
| Single Item | Multiple items
------|-----------------------|----------------------------
Sync | Higher order function | Linq/Ramda/java.util.stream
Async | Future/promise | Rx observable
你得注意的是,根据实施,可以让期货和RX观测既能同步或异步取决于你正在尝试与他们做的是同步的还是 - 异步行为
他们不是相互排斥的。 主要是确定是否有未来单个结果或多个未来的结果。
http://blogs.msdn.com/b/rxteam/archive/2012/03/12/reactive-extensions-v2-0-beta-available-now.aspx
http://blogs.msdn.com/cfs-filesystemfile.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-31-75-metablogapi/0815.image_5F00_thumb_5F00_59BBA077.png
文章来源: A code example illustrating the difference between the paradigms of async/await and Reactive (Rx) extension?