.NET Reactive Framework的良好介绍

时间:2009-10-20 17:33:42

标签: c# .net asynchronous system.reactive

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

此外,Reactive使用常规异步编码技术解决难以解决的编程问题更容易成为一个很好的例子(使用代码)?

16 个答案:

答案 0 :(得分:93)

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

感谢Hot / Cold帖子的链接。这只是full series的一部分,

  1. Rx简介
  2. 静态和扩展方法
  3. 终身管理 - 完成和取消订阅
  4. 流量控制
  5. 合并多个IObservable流
  6. 计划和线程
  7. 冷热观测资料
  8. 测试Rx
  9. 缓冲区,窗口,加入和组加入
  10. 我将继续使用更多Rx介绍性内容更新此博客。

    有关更高级的内容,请转到Rx Forum(MSDN)。

答案 1 :(得分:84)

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

我发现这是最全面的网站,也是最快开始使用的网站。

答案 2 :(得分:60)

答案 3 :(得分: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上有几个关于这个主题的不同视频:

答案 4 :(得分:12)

一旦你完成了一些基本的东西,包括HandsOnLab 请确保你查看Lee Campbell's Hot and Cold Observables,它为我带来了一些神秘的Rx神秘之处:)

答案 5 :(得分:4)

您可能会发现有关反应性LINQ的这一系列文章(有四篇)非常有用: Reactive programming (II.) - Introducing Reactive LINQ

他有一个使用它编写游戏的例子,所以它应该是你想要的。

答案 6 :(得分:4)

我还在CodeBetter.com上找到了 Introducing the Reactive Framework Part I 。第一部分在同一网站上有续集。

我希望这会对你有所帮助。

答案 7 :(得分:4)

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

答案 8 :(得分:3)

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

答案 9 :(得分:2)

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

相信这会有所帮助

答案 10 :(得分:2)

要回答第二个问题,这是一个可以从Rx中受益匪浅的问题。它被称为“快速致富”。

你已经开发了一个同名的游戏,它的销售情况非常好。但它只在您的商店批发供应。为了使现金处理更容易,您有一条流向您的传送带。

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

销售人员在其上放置大量现金,没有标签显示一揽子账单的金额和类型。你的工作是分拣和计算钱。稍后,当你获得更多钱时,你可以聘请其他人来帮助你。

在这种情况下,源是大量现金(生产者)的异步来源。 您的员工和供应商都希望获得资金,但您必须使用wad,解压缩并使用自定义业务逻辑重新打包以适当支付费用。

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

您可以用字节[]表示每个wad。

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

答案 11 :(得分:2)

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

Amazon.com: Programming Reactive Extensions and LINQ

还有Channel9上的RxWorkshop视频:

Channel9: RxWorkshop

答案 12 :(得分:1)

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

来自反应框架的创建者Erik Meijer:   - Expert to Expert: Brian Beckman and Erik Meijer - Inside the .NET Reactive Framework (Rx)

全新Getting Started with Rx Extensions for .NET

答案 13 :(得分:1)

DEVHOL202 – Curing the asynchronous blues with the Reactive Extensions for .NET (PDF,2 MB)是迄今为止我见过的最好的实验室/教程。它指导您完成库的基础知识,以便您可以构建和设计您学到的知识。

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

答案 14 :(得分:1)

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

以下是一些Bart De Smet(非常聪明的家伙,他解释的事情非常好)视频:

有点了解Rx:
Rx - Curing your Asynchronous Programming Blues

一些血腥的内心+一些哲学,这些视频真的很有启发性:
Min LINQ - The essence of LINQ
(上面的视频讲述了LINQ与其他事物的关系,如Rx)

Observations on IQbservable - The Dual of IQueryable

答案 15 :(得分:0)

我喜欢 Introduction to Rx Part 1 - Key types ,它显示了主要功能。

相关问题