【问题标题】:Good introduction to the .NET Reactive Framework [closed].NET Reactive Framework 的良好介绍 [关闭]
【发布时间】:2010-12-08 10:40:14
【问题描述】:

除了微软文档之外,还有没有关于微软响应式 (Rx) 框架的很好的介绍和教程?

另外,有什么好的例子(带有代码)可以让 Reactive 更轻松地解决使用传统异步编码技术难以解决的编程问题?

【问题讨论】:

标签: c# .net asynchronous system.reactive


【解决方案1】:

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

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

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

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

想要了解更高级的内容,请访问Rx Forum (MSDN)。

【讨论】:

  • 我一直在拖拖拉拉地学习 Rx,因为所有的学习材料都是视频的形式。 +1 用于提供这种基于文本的资源。
  • 枚举此链接已失效。
  • 万岁枚举此链接
  • 我和 James (EnumerateThis) 一起工作,他只是多年没有碰过它。他似乎没有时间或兴趣重振它
【解决方案2】:

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

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

【讨论】:

  • 据我所知,这个 wiki 并没有告诉你要包含哪个参考。这相当……令人沮丧。
  • 嗯,只需添加 dll 并打开对象资源管理器并搜索类。当然,Visual Studio 中的右键上下文菜单也有帮助
【解决方案3】:

【讨论】:

  • +1 强烈推荐这些视频,我学到了很多,还可以看看 Bart De Smet 的一些关于 IQueryable 和 IQbservable 的视频,你可以更好地了解 Rx 的内部。
  • “DevCamp 2010 主题演讲”视频的完整示例项目在这里:bartdesmet.net/download/Rx40Samples.zip
【解决方案4】:

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

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 上有几个关于这个主题的不同视频:

【讨论】:

  • .Until 来自哪里,我永远无法使用它,我一定是缺少参考
  • @TimothyP,我认为这可能是对旧版本的回归。那或者我自己写了一个(当时我正在玩实现 IObservable 扩展方法)。据我所知,最新版本的响应式扩展有一个名为TakeUntil 的方法,看起来很合适。
  • 这是一个很好的例子,展示了 Rx 的精神。谢谢。
  • 能分享一下Pairwise()的实现吗?
  • @blaster,这个实现怎么样:var pairwise = source.Zip(source.Skip(1), (x, y) => new Tuple(x, y)).
【解决方案5】:

一旦你完成了一些基本的东西,包括HandsOnLab 确保您查看Lee Campbell's Hot and Cold Observables,它为我解开了 Rx 的一些奥秘:)

【讨论】:

    【解决方案6】:

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

    【讨论】:

      【解决方案7】:

      您可能会发现这个关于反应式 LINQ 的系列文章(共有四篇)很有用: Reactive programming (II.) - Introducing Reactive LINQ.

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

      【讨论】:

        【解决方案8】:

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

        希望对你有帮助。

        【讨论】:

          【解决方案9】:

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

          【讨论】:

            【解决方案10】:

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

            相信这会有所帮助

            【讨论】:

              【解决方案11】:

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

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

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

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

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

              销售人员各司其职,因此他们不必等你数数他们扔在腰带上的东西。如果您被告知何时有更多的钱可以计算,那么您的时间就得到了最好的利用,在此之前您可以做其他工作。

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

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

              【讨论】:

              • 这只是一些生产者(销售人员)在同一个 IObserver 上调用 OnNext,然后消费者订阅但确保它在不同的线程上观察到它的生产位置(OnNext )。
              【解决方案12】:

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

              Amazon.com: Programming Reactive Extensions and LINQ

              还有 Channel9 上的 RxWorkshop 视频:

              Channel9: RxWorkshop

              【讨论】:

                【解决方案13】:

                您的“排除 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

                【解决方案14】:

                除了 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】:

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

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

                  【讨论】:

                    【解决方案16】:

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

                    【讨论】:

                    猜你喜欢
                    • 2011-09-12
                    • 2011-06-19
                    • 1970-01-01
                    • 2022-06-11
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-05-27
                    相关资源
                    最近更新 更多