.NET Reactive Framework 的良好介绍 [关闭]

Posted

技术标签:

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

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

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

【问题讨论】:

我一直在寻找——我需要看很多例子才能知道它的最佳用途。 我用 Rx 在 WPF 中构建了一个实时 Bing 搜索的小演示:blog.andrei.rinea.ro/2013/06/01/… 我在博客上的一系列帖子中准确回答了这个问题:rehansaeed.co.uk/reactive-extensions-part1-replacing-events 【参考方案1】:

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

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

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

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

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

【讨论】:

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

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

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

【讨论】:

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

Rx-Framework 的 MSDN 站点

对于更深入的开发人员,Source Code

关于 Rx 的酷奥地利主题演讲

这是我见过的最好的:DevCamp 2010 Keynote - Rx: Curing your asynchronous programming blues

第 9 频道的一些有趣视频

Kim Hamilton and Wes Dyer: Inside .NET Rx and IObservable/IObserver in the BCL (VS 2010)

对来自 Rx 的创作者的采访:Expert to Expert: Brian Beckman and Erik Meijer - Inside the .NET Reactive Framework (Rx)

Rx 创始人介绍

E2E: Erik Meijer and Wes Dyer - Reactive Framework (Rx) Under the Hood 1 of 2 E2E: Erik Meijer and Wes Dyer - Reactive Framework (Rx) Under the Hood 2 of 2

一个代码项目Article

另一门课程first blog with links (新)

【讨论】:

+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 链接到十几个视频和博客,但忘记链接到全面的官方参考文档。太可惜了,如果你认识这个团队,请让他们修复他们的网站!

http://msdn.microsoft.com/en-us/library/hh242985(v=vs.103).aspx http://msdn.microsoft.com/en-us/library/hh242986(v=vs.103).aspx http://msdn.microsoft.com/en-us/library/system.reactive.linq.observable(v=VS.103).aspx

【讨论】:

【参考方案7】:

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

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

【讨论】:

【参考方案8】:

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

希望对你有帮助。

【讨论】:

【参考方案9】:

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

【讨论】:

【参考方案10】:

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

第一部分 - System.Reactive or the .NET Reactive Extensions (Rx) – Concepts and First Look 第二部分 - LINQ To Events - More on .NET Reactive Extensions (Rx) 第三部分 - LINQ To Events - Generating GetEventName() Wrapper Methods using T4 Text Templates

相信这会有所帮助

【讨论】:

【参考方案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

【讨论】:

还有channel9.msdn.com/shows/Going+Deep/…【参考方案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,它展示了主要功能。

【讨论】:

这个系列演变成在线书introtorx.com

以上是关于.NET Reactive Framework 的良好介绍 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 Reactive.NET RX 处理 Click 和 Double Click

如何使用 asp.net Web API 2(使用 TPL/Reactive)缓冲和批处理 REST 获取查询?

响应式系统reactive system初探

Reactive(响应式)编程

.NET和.NET Framework的关系

Microsoft.NET Framework的错误