81

我了解 Rx 的基础知识。我苦苦挣扎的地方是你如何在学术例子之外实际使用它?在哪些常见的、简单的现实世界场景中,Rx 是比我们今天在 .NET 中的解决方案更好的解决方案?

4

6 回答 6

39

有关一堆好的示例,请参阅101 Rx Samples wiki

于 2010-03-31T06:04:40.370 回答
28

Rx 允许您编写将并发事件编排在一起的代码。如果您曾经使用过 TPL(即任务),那么必须进行复杂的后空翻来尝试在正确的事情上使用 ContinueWith 或 WaitAll,Rx 适合您。

例如,“对于这个数组中的每个项目,调用一个 Web 服务,当所有这些请求都返回时,执行其他操作。如果其中任何一个失败,则整个事情都失败”。

披露,无耻插入: Jesse Liberty 和我写的关于 Rx 的书旨在解决这个问题,“我如何在日常工作中使用 Rx?”;“我能用这个什么?”

于 2011-11-07T02:18:20.050 回答
25

首先,IObservable是一个事件。因此,在您在内部使用事件的任何地方,您都可以使用 IObservable - 如果您以后需要将 LINQ 应用于此事件,则无需重构即可完成。

其次,RX 适用于需要异步运行代码的任何情况。例如,调用 Web 服务或加载大图像。

但是当它真正开始发光时——如果你的程序达到了 IObservable 使用的“临界质量”并且你开始组合不同的 observables,你会惊讶于某些任务变得多么容易。

于 2010-04-25T02:03:11.857 回答
5
  • 设备测量
  • 通过消息总线传入的数据

现在在这两种情况下,接收数据的标准方式是通过事件,但是如果我想要查询语法或组合,那么 RX 会在事件不需要的地方将它提供给我。

于 2010-04-19T18:44:22.513 回答
2

Rx 非常通用,因此它具有无限的效用,就像 IEnumerable/IEnumerator 具有无限的效用一样。IE 拉取值,IO 推送值。

Foreach 是 IEnumerables 派上用场的一个具体示例,但这并不能解释 IEnumerable、yield 或任何东西。Rx 也是如此。

能够从拉的角度或推的角度看待事物,并且能够控制方向或手段,是非常强大的,因为现在您可以使用 LINQ 查询随意推拉计算“免费”运算符,针对 IO,因为它是 IE 的数学对偶。

于 2010-05-02T06:10:17.370 回答
0

我刚刚第一次看到 Rx,但是我将使用它的一个有趣的项目是创建一个 Silverlight 小部件,该小部件在我们的 ASP.NET MVC Web 应用程序中显示活动(调用了哪些操作方法,由哪个用户等) . 看起来 Rx 可以在这个项目中提供很多帮助,例如并发管理和 Throttling。

于 2011-06-07T22:43:29.817 回答