我了解Rx的基础知识。我在苦苦挣扎的地方是,您将如何实际使用它而不是学术实例?在哪些常见的简单现实世界场景中,Rx是比.NET今天更好的解决方案?
我了解Rx的基础知识。我在苦苦挣扎的地方是,您将如何实际使用它而不是学术实例?在哪些常见的简单现实世界场景中,Rx是比.NET今天更好的解决方案?
Answers:
有关大量示例,请参见101 Rx Samples Wiki。
Rx允许您编写协调并发事件的代码。如果您曾经使用过TPL(即Task),则必须进行复杂的后空翻以尝试在正确的地方使用ContinueWith或WaitAll,Rx适合您。
例如,工作流“对于该数组中的每个项目,调用一个Web服务,然后当所有这些请求都返回时,执行其他操作。如果其中任何一个失败,则整个事情都失败”。
公开,无耻地插入: 我和杰西·利伯蒂(Jesse Liberty)写的关于Rx的书旨在解决这个问题:“我如何在日常工作中使用Rx?”;“我该怎么办?”
首先,IObservable是一个事件。因此,在内部使用事件的任何地方,都可以使用IObservable-如果以后需要将LINQ应用于此事件,则无需重构就可以做到。
其次,当您需要异步运行代码时,RX适用于任何情况。例如,调用Web服务或加载大图像。
但是,当它真正开始发光的时候-如果您的程序达到IObservable使用的“临界质量”,并且您开始组合不同的Observable,您将惊讶于某些任务变得如此容易。
Rx非常通用,因此它具有无限的实用性,就像IEnumerable / IEnumerator具有无限的实用性一样。IE拉取值,IO推入值。
Foreach是IEnumerables派上用场的具体示例,但这并不能解释IEnumerable或yield或任何东西。Rx也是如此。
能够从拉动角度或推挤角度看事物,并且能够控制方向或手段,是非常强大的,因为现在您可以使用LINQ查询随意推拉计算操作员针对IO进行“免费”操作,因为它是IE的数学对偶。
我刚看过Rx,但是我将使用它的一个有趣的项目是创建一个Silverlight小部件,该小部件显示ASP.NET MVC Web应用程序中的活动(调用了哪些操作方法,由哪个用户等等) 。似乎Rx可以在此项目中提供很多帮助,例如并发管理和节流。