我理解Rx的基础知识。我正在努力的是你如何在学术范例之外实际使用它?什么是常见的,简单的现实场景,其中Rx是比我们今天在.NET中更好的解决方案?
答案 0 :(得分:40)
有很多好例子,请参阅the 101 Rx Samples wiki
答案 1 :(得分:26)
Rx允许您编写将并发事件编排在一起的代码。如果您曾经使用过TPL(即任务),那么不得不做一个复杂的后空翻来试图在正确的事情上继续使用ContinueWith或者WaitAll,Rx适合你。
例如,“对于此阵列中的每个项目,调用Web服务,当所有这些请求都返回时,请执行其他操作。如果其中任何一个失败,则无法完成所有操作”。
披露,无耻插件:The book that Jesse Liberty and I wrote about Rx旨在解决这个问题,“我如何在日常工作中使用Rx?”; “我能用做什么?”
答案 2 :(得分:25)
首先,IObservable 是一个事件。因此,在内部使用事件的任何地方,您都可以使用IObservable - 如果您以后需要将LINQ应用于此事件,则可以在不重构的情况下执行此操作。
其次,当您需要运行代码异步时,RX适用于任何情况。例如,调用Web服务或加载大图像。
但是当它真正开始闪耀 - 如果你的程序达到IObservable使用的一些“临界质量”并且你开始结合不同的可观察量,你会惊讶于容易一些任务变成了。
答案 3 :(得分:5)
在这两种情况下,接收数据的标准方式是通过事件,但如果我想要查询语法或组合,那么RX会将事件发送给我。
答案 4 :(得分:2)
Rx非常通用,因此它具有无限的实用性,就像IEnumerable / IEnumerator具有无限的实用程序一样。 IE拉取值,IO推送值。
Foreach是IEnumerables派上用场的一个具体例子,但这并不能解释IEnumerable,或者yield或者其他什么。 Rx也是如此。
能够从拉视角或俯视角度观察某些东西,并且能够控制方向或手段,是非常强大的,因为现在你可以随意推送和拉动计算,使用LINQ查询运算符“免费”,对IO,因为它是IE的数学对偶。
答案 5 :(得分:0)
我刚刚看了Rx,但是我将使用它的一个有趣的项目是创建一个Silverlight小部件,它在我们的ASP.NET MVC Web应用程序中显示活动(调用哪些动作方法,由哪个用户等)。看起来Rx可以帮助解决这个项目中的很多问题,比如并发管理和Throttling。