222

除了 Microsoft 文档之外,是否有关于 Microsoft Reactive (Rx) 框架的良好介绍和教程?

此外,什么是反应式使使用传统异步编码技术难以解决的编程问题更容易的一个很好的例子(带有代码)?

4

16 回答 16

102

更新:下面的博客文章已被我的在线书籍www.IntroToRx.com取代。这是一本全面的 19 章书籍,免费提供。你可以在网上浏览它,或者为你的 kindle 下载 mobi 版本。您也可以直接从亚马逊购买,只需支付少量费用(~99c / 77p)。如果这本书不符合您的需求或期望,请告诉我(作者),我们会在 v2.0 上做得更好。

感谢热/冷帖子的链接。这只是全系列的一部分,

  1. Rx 简介
  2. 静态和扩展方法
  3. 终身管理 - 完成和取消订阅
  4. 流量控制
  5. 组合多个 IObservable 流
  6. 调度和线程
  7. 冷热观测
  8. 测试 Rx
  9. 缓冲区、窗口、连接和组连接

我将继续更新此博客,提供更多 Rx 介绍性内容。

有关更高级的内容,您可以访问Rx 论坛(MSDN)。

于 2011-01-04T14:51:10.773 回答
85

这是一个 wiki 站点,其中包含许多代码示例,演示了如何使用 .NET Rx 框架的不同功能:http ://rxwiki.wikidot.com/101samples

我发现这是目前最全面的网站,也是上手速度最快的网站。

于 2009-12-23T02:30:26.090 回答
16

这是一个使用反应式编程很容易做到的事情的例子,但是对于经典事件来说很混乱(如果不是具有挑战性的话),它会在鼠标按钮按下时画线。它是可读的,没有明确的状态处理:

var pen = new Pen(Color.Red, 3);
var graphics = this.CreateGraphics();

var mouseMoveWhileDown = 
    from md in this.GetMouseDown()
    from mv in this.GetMouseMove().Until(this.GetMouseUp())
    select new Point(mv.X, mv.Y);

mouseMoveWhileDown
    .Pairwise()
    .Subscribe(tup => graphics.DrawLine(pen, tup.Item1, tup.Item2)); 

(我必须承认,在那个例子中, Pairwise() 是本土的......)

IObservable 最重要的是它是“可组合的”,就像 IEnumerable 一样。

我彻底推荐另一个答案中提到的视频。事实上,Channel9 上有几个关于这个主题的不同视频:

于 2009-11-17T14:26:27.887 回答
12

一旦你完成了包括HandsOnLab在内的一些基本内容,请 确保你查看了Lee Campbell 的 Hot and Cold Observables,它为我解开了 Rx 中的一些奥秘:)

于 2010-09-15T10:46:11.950 回答
5

奇怪的是,Reactive Extensions主页链接到十几个视频和博客,但忘记链接到全面的官方参考文档。太可惜了,如果你认识这个团队,请让他们修复他们的网站!

于 2012-03-28T21:56:32.427 回答
4

您可能会发现关于反应式 LINQ 的这一系列文章(共有四篇)很有用: 反应式编程 (II.) - 反应式 LINQ 简介

他有一个使用它编写游戏的例子,所以它应该是你正在寻找的。

于 2009-10-20T17:37:31.993 回答
4

还在CodeBetter.com. _ 第一部分在同一网站上有续集。

我希望这能帮到您。

于 2009-11-03T12:21:22.480 回答
3

使用Rx Sandbox可以非常直观地了解不同组合器的含义。这是我见过的最好的学习工具。

于 2011-01-21T11:33:12.913 回答
2

阅读这些文章,特别是下载相关的源代码并使用它。

相信这会有所帮助

于 2009-11-18T14:40:10.430 回答
2

要回答第二个问题,这里有一个可以从 Rx 中受益匪浅的问题。这就是所谓的“快速致富”。

您开发了一款同名游戏,并且卖得很好。但它只能在您的商店批发。为了使现金处理更容易,您有一条流向您的传送带。

(请随意更改上面的故事:))

销售人员将装订好的一沓现金放在上面,没有标明一沓钞票的数量和类型的标签。你的工作是分类和数钱。以后,当你得到更多的钱时,你可以聘请其他人来帮助你。

在这种情况下,来源是大量现金的异步来源(生产者)。您的员工和供应商期望钱,但是您必须消耗这些钱,打开它们并使用您的自定义业务逻辑重新包装以适当地支付它们。

销售人员在他们自己的线程上运行,因此他们不必等你数数他们扔在腰带上的东西。如果你被告知什么时候有更多的钱可以计算,你的时间就会得到最好的利用,在那之前你可以做其他工作。

您可以用 byte[] 来表示每个 wad。

这是一个相当普遍的现实世界情况;当您检索网络上的任何资源 [例如,用于搜索引擎、图像或视频的网页] 或来自外围设备的数据时,您会以字节块(可能带有标头)的形式获取它们。在单线程或难以使用的多线程环境中,您倾向于聚合和处理它们。不再!!

于 2011-01-25T01:37:20.230 回答
2

Jesse Liberty 出版了一本书,于 2011 年 10 月出版:

Amazon.com:编程反应式扩展和 LINQ

Channel9 上有 RxWorkshop 视频:

频道9:RxWorkshop

于 2011-11-06T05:33:43.640 回答
1

您的“排除 Microsoft 文档”条款是否扩展到第 9 频道的视频?

来自反应式框架 Erik Meijer 的创建者: -专家到专家:Brian Beckman 和 Erik Meijer - .NET Reactive Framework (Rx) 内部

全新.NET 的 Rx 扩展入门

于 2009-10-31T13:50:22.220 回答
1

DEVHOL202 – 使用 Reactive Extensions for .NET (PDF, 2 MB) 治愈异步忧郁是迄今为止我见过的最好的实验室/教程。它指导您了解图书馆的基础知识,以便您可以根据所学内容进行构建和设计。

还有一个 JavaScript 版本。在 Google 上搜索“Reactive Extensions Hands on Lab”。

于 2011-01-08T07:53:02.190 回答
1

除了 Andreas Hoffmann 的链接(在我学习 Rx 时发现它们非常有用)

这里有一些 Bart De Smet(一个非常聪明的人,他能很好地解释事情)视频:

有点像 Rx:
Rx - 治愈你的异步编程忧郁

一些血淋淋的内幕+一些哲学,这些视频真的很有启发性:
Min LINQ - LINQ 的本质
(上面的视频涉及 LINQ 与其他事物的关系,如 Rx)

对 IQbservable 的观察 - IQueryable 的对偶

于 2011-01-14T16:49:40.313 回答
0

我喜欢Rx 简介第 1 部分 - 密钥类型,它展示了关键特性。

于 2011-07-08T13:22:07.917 回答