![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Reactive Extensions
文章平均质量分 80
重-庆-教-主
这个作者很懒,什么都没留下…
展开
-
015.Rx包的描述及从Nuget安装
然后,在您最喜欢的工具(如Visual Studio 2015或Visual)中创建一个新项目Studio Code (https://code.visualstudio.com/docs/runtimes/dotnet)。在本节中,Rx示例使用与上一节中相同的StockTicker,但这次您将不再使用传统的标准.NET事件。要向项目添加必要的引用,您需要从NuGet中选择适当的包,NuGet是一个. net包管理器,您可以轻松地从中搜索和安装包(通常包含库)。当您编写特定的平台或技术时,您将添加补充包。原创 2024-05-19 17:50:37 · 913 阅读 · 0 评论 -
014.讨论资源处理,组合性与同步
我发誓我在过去的应用程序中编写了这段代码(或类似的代码),通过一个键保存以前的状态,并在每次更新时更新它,我敢打赌您也有同样的感觉。此外,我还觉得这段代码是不可组合的,条件越多,看到的内部if语句就越多,代码的可读性就越差。同步是开发人员容易忘记的另一件事,它会导致与我们遇到的问题相同的问题:由于计算值不正确而导致的不可靠代码,以及在使用非线程安全类时可能发生的崩溃。如果给您的代码提供了新的需求,例如通过查看两个以上连续的事件来计算变更比率,那么您的代码将不得不发生巨大的变化。让我们从代码的分散性开始。原创 2024-05-19 11:21:01 · 457 阅读 · 0 评论 -
013.处理并发
但是,最后一个不一定是最后一个股票点,因为线程运行的顺序是由操作系统决定的,并且是不确定的。但是,当您开始在应用程序的各个位置添加锁时,最终可能会导致性能下降,因为锁会增加执行时间以及线程等待关键部分可用的时间。每个线程都持有另一个线程所需的资源,同时它们都在等待另一个所持有的资源。如果一个类的任何一个方法都是线程安全的,即使同时从不同的线程调用不同的方法,该类也被称为线程安全的。代码部分的线程安全性意味着,当从多个线程调用代码时,无论这些线程执行代码的顺序如何,代码都能正常工作,并且不需要同步调用代码。原创 2024-05-19 10:54:08 · 655 阅读 · 0 评论 -
012.使用传统.NET事件进行通知操作
最近,Stocks R Us发现,它可以通过使用一个系统来节省资金,该系统可以为经历了剧烈变化的股票提供警报,正如Penny先生所说。例如,建筑物周围的安全摄像头,以及当有人可能在建筑物附近时触发的运动传感器,会向我们发送最近摄像头的照片。对于这些场景和其他类似的场景,编排往往会导致复杂的程序,正如你所看到的,Rx肯定会减轻这种努力。对于您的应用程序,最重要的属性是股票的报价符号和价格。如果股票信息存在,您可以检查股票的当前和以前的价格,如以下列表所示,以查看变化是否大于定义剧烈变化的阈值。原创 2024-05-16 11:20:14 · 725 阅读 · 0 评论 -
011.理解事件(events)和流(streams)
无论您在应用程序中使用何种类型的数据,都应该明白,一切都可以作为流来观察,甚至是静止的数据和对应用程序来说看起来静态的数据。这与您对Shoppy示例所做的类似,在Shoppy示例中,对服务器的调用作为更复杂的执行管道的一部分获得了折扣,该管道还使用了过滤(在连接上)并最终刷新了视图(就像洒水喷头泼水一样)。但是,我们的应用程序正在使用的简单数据呢,比如数据库中的数据或从web服务器获取的数据。运动中的数据在网络(或其他介质)上移动,并被推送到您的应用程序或由您的应用从任何外部源提取。原创 2024-05-14 16:10:19 · 436 阅读 · 0 评论 -
010.理解异步性
同步执行的一个现实例子发生在快餐店:你走向柜台的工作人员,在店员等待的时候决定要点什么,点你的食物,一直等到饭菜准备好。例如,在Shoppy应用程序中,不仅当您的位置发生变化时,而且当您的连接状态变为在线时,您都希望获得新的折扣——例如,如果您的手机短时间失去信号,然后重新连接。这种类型的序列感觉像是在浪费时间(或者,更好地说,是在浪费资源),所以想象一下当你为应用程序做同样的事情时,你的应用程序会有什么感觉。因为所有方法都是并发运行的(甚至可能是并行运行的),所以运行代码所需的时间将是最长操作的时间。原创 2024-05-14 15:56:32 · 1168 阅读 · 0 评论 -
009.Rx(Reactive Extenstions)的关系
响应式扩展库在组成响应式系统的应用程序中发挥作用,它与消息驱动的概念相关。Rx不是在应用程序或服务器之间移动消息的机制,而是在消息到达时负责处理消息并将其沿着应用程序内部的执行链传递的机制。每一个都可以在不同的系统中以不同的方式实现。Rx是允许更容易地使用消息的一种方式,因此它显示为消息驱动块的一部分。Rx是作为一种处理异步和基于事件的程序的方式引入的,就像在消息的情况下一样,所以我必须解释异步意味着什么以及为什么它很重要。Rx位于消息驱动概念中,因为Rx提供了在消息进入应用程序时处理消息的抽象。原创 2024-05-14 11:04:08 · 172 阅读 · 0 评论 -
003.Rx(Reactive Extensions)的由来
可观测的手段作为用户,您可以观察到序列所携带的值,以及序列的含义所携带的东西是有命令的。在Rx中,一个流由可观察对象表示,这些可观察对象可以从。您可以在https://reactivex.io/找到有关它们的信息以及文档和新闻,.NET的响应式扩展托管在GitHub,网址是https://github.com/Reactive-Extensions/Rx.NET。例如,Netflix就使用Rx广泛地在其服务层,并负责RxJava端口,微软还在内部使用Rx来运行cortana——托管的智能个人助理。原创 2024-05-13 21:03:52 · 955 阅读 · 0 评论 -
004.可观察对象与观察者
另外,就像我说的在此之前,Rx用于大型应用程序,如Microsoft Cortana、Netflix和使用Microsoft StreamInsight的复杂事件处理(CEP)。可观察对象被定义为事件(或通知)的来源,或者,如果你愿意,也可以定义为数据流的发布者。对于不支持事件作为一等公民的语言,使用观察者模式是一个有用的设计模式,允许您向应用程序添加类似事件的支持。在某些编程语言中,事件有时作为一等公民提供,这意味着您可以使用所提供的语言定义和注册事件关键字和类型,甚至将事件作为参数传递给函数。原创 2024-05-13 21:51:56 · 719 阅读 · 0 评论 -
005.反应式编程的操作代码示例
在Rx中,使用运算符进行操作是一种不错的方式,但同时它也是领域特定语言的一部分(DSL),它以声明的方式描述事件处理。Rx运算符允许获取可观察对象和观察者,并创建查询、转换、投影和其他您可能从LINQ中了解到的事件处理器的管道。在这个简单的示例中,您可以看到Rx操作符的声明式风格——说明什么你想要的,而不是你想要的——所以代码读起来就像一个故事。现在,您可以假设可观察对象是在幕后为您创建的。操作符和组合符(组合多个可观察对象的操作符)可以帮助您创建涉及多个可观察对象的更复杂的场景。原创 2024-05-14 08:27:35 · 157 阅读 · 0 评论 -
006.Rx操作符的可组合性
请记住,每个操作符(至少是绝大多数操作符)都返回自己的可观察对象,因此在图中,我将作为管道一部分的操作符写在左侧,并将表示从管道返回的可观察对象的线写在右侧。这就是为什么,在解释响应式编程时尤其是Rx,显示可观察对象的执行管道是很重要的序列。因为您不仅可以在创建可观察对象时,而且可以在订阅观察对象时向管道添加运算符,所以即使您无法访问创建可观察内容的代码,也可以控制可观察内容。另一个重要的结论是从观察者的角度来看,一个可观察的东西无论是否添加操作符,它仍然是一个可观察对象,如图1.8所示。原创 2024-05-14 08:49:55 · 251 阅读 · 0 评论 -
007.拉取模型与推送模型
由于可观察对象和可枚举对象之间存在反向对应关系(对偶性),因此可以从值序列的一种表示转换为另一种表示的固定集合,例如List,可以转换为一个可观察对象,通过将其所有值推入观察器来推出它们。现在,最重要的事情是,因为您可以将一种模型转换为另一种模型,所以您可以使用基于拉取模型完成的所有操作也可以使用基于推送模型完成。我在这里要说明的最后一点是,由于您可以将单个值视为一个项目的集合,因此您可以按照相同的逻辑将异步单个项目(Task)视为一个项目的可观察对象,反之亦然。译者:重庆教主 2024.05.14。原创 2024-05-14 09:19:06 · 371 阅读 · 0 评论 -
008.使用响应式系统和《响应式宣言》
在任何一种情况下,如果系统响应所需的时间是合理的,则可以说应用程序是响应的。为了克服过载的原因,您的系统需要具有弹性:它需要随着负载的增加而跨越实例,并随着负载的减少而移除实例。系统的响应可能是积极的结果,例如您试图加载的页面、您试图从web服务获取的数据或您希望在金融客户端应用程序中看到的图表。在这一点上,你可以说,响应性是你的目标,弹性是确保你保持响应的方法,弹性是保持弹性的方法之一。反应性系统的谜题中缺少的部分是系统各部分之间的通信方式,以允许我们所探索的反应性类型。它可以处理的消息类型。原创 2024-05-14 10:13:17 · 823 阅读 · 0 评论 -
002.反应式编程的必要性
在实际应用程序中,您可以在许多情况下发现可能的时变变量—例如,GPS位置、温度、鼠标坐标,甚至文本框的内容。在c#这样的命令式编程模型中,您将使用事件来创建响应机制更改,但这可能导致难以维护的代码,因为事件是分散的在各种代码片段之间。这是一个简单的例子,但正如您将看到的,使用反应的强大功能编程模型在于其组合和连接以及划分和连接的能力拆分每个时变变量所推入的值流。你想从Shoppy中获得的一个重要功能是设置商店图标的大小用户越靠近(从某个最小半径开始),地图上的距离越大,如图图1.3。图标变大了(在右边)。原创 2024-05-13 17:21:18 · 272 阅读 · 0 评论 -
001.开始进入反应式编程的世界
随着Facebook和Twitter等应用程序的兴起,在大洋的另一边发生的每一个变化(例如,状态更新)都是立即发生的在另一边观察,一连串的反应立即在里面发生应用程序。响应式编程引入了一种不同类型的随时间变化的变量:这个变量不是固定于其分配的值,而是随着时间的推移对发生的变化做出反应而变化。这本书将一步一步地教你建立在Rx的各个层上,从允许您创建响应式的构建块开始数据和事件流,通过Rx提供的丰富查询功能,以及Rx并发模型,允许您控制代码的异步性和。最简单的一个是变化的变量值,我们在日常编程中已经很习惯了。原创 2024-05-13 17:03:32 · 671 阅读 · 0 评论