Gen*_*нин 16 c# task-parallel-library system.reactive async-await c#-5.0
两个系统..NET的反应性扩展和新的C#5.0(.NET 4.5)async/await追求(或基于)未来和承诺构造范式(方法).
你能给出(*)最简单的C#代码示例来说明它们之间的区别吗?
(*)
没有I/O,互联网或数据库连接是否可能?
更新:
好吧,如果以前似乎回答了这个问题,让我重新制定一下.
为什么在使用本机.NET Iobservable/IObserver + await/async时会添加并开始使用.NET的Reactive(Rx)扩展?
如果没有Rx(即只使用原生的.NET Iobservable/IObserver + await/async方法),Rx中缺少哪些内容可能会更加笨拙或效率更低?
Lee*_*ell 16
Future/Promise范例通常用于在未来返回单个值.也许需要一些繁重的计算或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>但是,在使用任务进行测试时,可以避免隐式并发.
最后,除了Rx处理值序列(不是单个值)的主要区别之外,Rx还设计为与LINQ一起使用,以提供查询和组合优势,这些优点似乎与序列非常相似(在静止状态下IEnumerable<T>,或者在运动中IObservable<T>).
最终,这些是针对略有不同的工作的不同工具.有一些重叠,所以你有时可以使用一个来做另一个更好的.具体来说,我认为Task更好地组合异步工作单元(这样做,然后执行此操作,然后执行此操作),其中Rx更好地组合事件序列(当此事件发生时,使用来自的数据执行此操作这个其他事件).
它们并不相互排斥。主要的决定是您是否有一个未来结果或多个未来结果。
http://blogs.msdn.com/b/rxteam/archive/2012/03/12/reactive-extensions-v2-0-beta-available-now.aspx
我喜欢Reactive文档中的表格: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
请注意,根据实现,您可以拥有可以同步或异步执行的future和rx observable,具体取决于您尝试使用它们是同步还是异步
| 归档时间: |
|
| 查看次数: |
5465 次 |
| 最近记录: |