我一直在玩Reactive Extension一段时间,但主要限于在WPF前端处理/编写用户驱动的事件。
这是一种强大的,新的异步编程方式,我很好奇其他人正在做什么,你认为它可以改善我们目前做事的方式?
答案 0 :(得分:39)
我们已经在两个项目(Silverlight UI)上使用了RX取得了巨大成功。最初的意图是simplify the WCF access layer)理性的是,在更糟糕的情况下,我们总是可以恢复到标准(回调)方式,而不会影响更高级别的UI。
我们很少知道RX就像一种令人上瘾的药物 - 一旦你开始使用它,就不会再回来了。就像病毒一样,它会迅速从这个低级别的通信层传播到UI组件:
然后是完全投降:
好吧,猜猜看,那里有RX操作员;)(如果没有 - 你可以很容易地写一个)
最难的部分就是要克服我们团队中每个人在开始时都经历过的“我的大脑疼痛 - 如此糟糕”的感觉。通过多年的处理 - 我的事件 - 通过这种回调编码来限制一个凡人的大脑,就像RX看世界一样。结果RX代码(特别是一旦它逐渐变得越来越密集,同时处理越来越复杂的场景)对于一个毫无准备的头脑看起来像完整的abracadabra有趣的确导致一只兔子从一个看似空洞的帽子中拉出来。不幸的是,现实是在生产代码中没有魔法的地方,所以整个团队必须在船上,这意味着每个人都必须经历这个痛苦的过程,重新调整他们的大脑,看起来像一个非常不自然的方式。
我认为这是一个人为因素而不是RX API本身,这是有效采用RX的最大障碍。但男孩是值得的!
答案 1 :(得分:11)
我已经为WPF / Silverlight和Rx编写了一个更完整的库,文档是(编辑:不再糟糕!),但你可以在以下网址查看:
答案 2 :(得分:4)
我使用RX来实现以块的形式加载数据(比如sql server management studio)。 Using Reactive Extensions for Streaming Data from Database
答案 3 :(得分:3)
Samuel McAravey有video on Channel9描述他使用RX构建的真实SilverLight应用程序。他even made it available on CodePlex。
此外,即使您没有异步要求,也可以应用RX时的一些实际用途:
答案 4 :(得分:3)
我们在Silverlight应用程序中从后端加载数据时成功使用Rx。我们最近从服务器上的SOAP服务纯XML生成迁移,Rx及时到来,以便我们可以使用它而不是WebClient或WebRequest(实际上我们现在将WebClient包装在Observable中,但可能会转移到WebRequest)。
我们几天前发现了一个错误;我们意识到请求URL太长,以至于它们被截断了。幸运的是,我们可以将请求分成多个并连接响应,但仅使用WebClient解决这个问题意味着创建一个队列和一个状态机来按顺序处理请求...相反,使用Rx我们可以简单地将请求分组,做我们以前做过的事情,但是在致SelectMany的电话中,我们完成了! Rx救援!
答案 5 :(得分:2)
对于Rx,我现在最喜欢的解决方案可能是将其用作事件聚合器。看看这里:
http://jfromaniello.blogspot.com/2010/04/event-aggregator-with-reactive.html
我将其改编为Silverlight,它就像一个魅力。功能强大的是过滤事件的能力。例如,一个事件只是键入“字符串”,因为没有其他信息。我没有为每个简单事件创建强类型类,而是创建了一个暴露常量的类(因此没有魔术字符串) - 例如,BEGIN_BUSY(当调用Web服务时),END_BUSY(完成后),等
要订阅,您可以按字面意思执行:
(from e in EventAggregator.Subscribe<string>() where e.Equals(BEGIN_BUSY) select true).Subscribe( evt=> { // Listening only to the BEGIN_BUSY event });
喜欢它!