微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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更好地组合在一起的事件序列(当这个事件发生时,这样做与数据从这个其他事件).

原文地址:https://www.jb51.cc/csharp/97924.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐