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

前端之家收集整理的这篇文章主要介绍了c# – 一个代码示例,说明了async / await和Reactive(Rx)扩展的范例之间的区别?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
System. Reactive extension for .NETnew C# 5.0 (.NET 4.5) async/await都追求(或基于) future and promises constructs范式(方法).

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

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

更新:
那么,如果这个问题似乎得到回答,我可以重新设计一下.
为什么会在使用本机.NET Iobservable/IObserver await/async添加并启动.NET的Reactive(Rx)扩展?

什么是可能的例证,Rx将丢失什么,使得做同样更笨拙或更低效率没有Rx(即只接受本机.NET Iobservable / IObserver等待/异步方法)?

解决方法

未来/承诺范式通常用于在将来返还单一价值.也许有一些重要的计算或IO是必需的,因此为什么不能保证及时返回同步.

Rx(并且通过代理IObserver< T> / IObservable< T>接口)是可观察序列的范例.正如同步方法可以返回单个值(int)一样,它也可以返回一个IEnumerable< int>有一个值.将其与异步世界进行比较,任务< int>可以返回一个单一的int值,IObservable< int>可以返回一个只有一个int值的序列.

所以如果你想返回一个值为Task< T>的值序列,你必须创建某种延续,或者返回一个数组的集合/数组/列表.任务< INT []取代.这将意味着您获得所有或非价值.

任务/任务< T>也是一种具体的类型,其中Rx使用接口来抽象实现.我发现这有助于单元测试. TaskCompletionSource< T>但是在使用任务进行测试时可以避免隐含并发.

最后,除了Rx处理值序列(而不是单个值)的主要区别之外,Rx还被设计为与LINQ一起工作,以提供查询和组合优势,这些优点似乎与序列非常好(或者像IEnumerable&或像运动中的IObservable< T>).

最终这些是不同的工具,用于稍微不同的工作.有一些重叠,所以你有时可以使用一个做其他的更好的.具体来说,我认为任务更好地组合异步工作的单元(做这个,然后这样做,然后这样做),其中Rx更好地组合在一起的事件序列(当这个事件发生时,这样做与数据从这个其他事件).

猜你在找的C#相关文章