IObservable 接口
转载自:https://jingyan.baidu.com/article/d3b74d64ac3b6c1f77e609c1.html
方法/步骤
IObserver<T> 和 IObservable<T> 接口为基于推送的通知提供通用机制,也称为观察者设计模式。。 IObservable<T> 接口表示发送通知(提供程序)的类;IObserver<T> 接口表示接收通知(观察器)的类。 T 表示提供通知信息的类。 在某些基于推送的通知中,IObserver<T> 实现和 T 可以表示相同的类型。
该提供程序必须实现一个方法 Subscribe,指出某个观察器要接收基于推送的通知。 该方法的调用方传递观察器的实例。 方法返回 IDisposable 实现,其可让观察程序在提供程序已停止发送它们的任意时间之前取消通知。
在任何给定时间,给定的提供程序可能具有零个、一个或多个观察器。 该提供程序负责存储对观察器的引用,并且在发送通知之前确保它们有效。 IObservable<T> 接口对于观察器的个数或发送通知的顺序不作任何假设。
该提供程序通过调用 IObserver<T> 方法向观察器发送以下三种通知:
【1】当前数据。 提供程序可以调用 IObserver<T>.OnNext 方法来为观察器传递包含当前数据、更改的数据或全新数据的 T 对象。
【2】一个异常情况。 提供程序可以调用 IObserver<T>.OnError 方法来通知观察器出现了某种错误情况。
【3】没有进一步的数据。 提供程序可以调用 IObserver<T>.OnCompleted 方法来通知观察器它已经完成通知的发送。
观察者设计模式使订阅者能够向提供程序注册并接收相关通知。 它适合所有需要推送通知的方案。 该模式定义一个提供程序(也称为主题或观察对象)以及零个、一个或多个观察者。 观察者向提供程序注册,并且当任何预定义的条件、事件或状态更改发生时,提供程序就会调用观察者中的一种方法,自动通知所有观察者。 在此方法调用中,提供程序还可以向观察者提供当前的状态信息。 在 .NET Framework 中,通过实现泛型 System.IObservable<T> 和 System.IObserver<T> 接口来应用观察者设计模式。 泛型类型参数表示提供通知信息的类型。
观察者设计模式适用于分布式推送通知,因为它支持两种不同的组件或应用程序层之间的绝对分离,例如数据源(业务逻辑)层和用户界面(显示)层。 每当提供程序使用回调向其客户端提供当前信息时,即可实现该模式。
实现该模式需要您提供以下内容:
提供程序或主体,即将通知发送给观察者的对象。 提供程序是一个实现 IObservable<T> 接口的类或结构。 提供程序必须实现一个方法 (IObservable<T>.Subscribe),希望接收提供程序通知的观察者会调用该方法。

观察者,即接收提供程序通知的对象。 观察者是一个实现 IObserver<T> 接口的类或结构。 观察者必须实现三个方法,提供程序将调用所有这些方法:
IObserver<T>.OnNext ,向观察者提供新信息或当前信息。
IObserver<T>.OnError ,通知观察者发生错误。
IObserver<T>.OnCompleted ,指示提供程序已完成通知发送。

允许提供程序跟踪观察者的机制。 通常情况下,提供程序使用容器对象(例如 System.Collections.Generic.List<T> 对象)存放对已订阅通知的 IObserver<T>实现的引用。 因此目的而使用存储容器时,提供程序能够处理零到无限数量的观察者。 不定义观察者接收通知的顺序;提供程序可以自由选择任何方法来确定该顺序。
允许提供程序在完成通知时移除观察者的 IDisposable 实现。 观察者从 Subscribe 方法接收对 IDisposable 实现的引用,所以它们还可以调用IDisposable.Dispose 方法以在提供程序完成通知发送之前取消订阅。
包含提供程序向其观察者发送的数据的对象。 该对象的类型对应于 IObservable<T> 和 IObserver<T> 接口的泛型类型参数。 尽管该对象可以与IObservable<T> 实现相同,但在通常情况下,该对象为不同的类型。
IObservable 接口的更多相关文章
- C# IObservable与IObserver观察者模式
C#中提供了IObservable<T>接口和IObserver<T>接口来实现观察者模式,IObservable<T>相当于Subject(主题)接口,下面我们就 ...
- 解构C#游戏框架uFrame兼谈游戏架构设计
1.概览 uFrame是提供给Unity3D开发者使用的一个框架插件,它本身模仿了MVVM这种架构模式(事实上并不包含Model部分,且多出了Controller部分).因为用于Unity3D,所以它 ...
- External Configuration Store Pattern 外部配置存储模式
Move configuration information out of the application deployment package to a centralized location. ...
- php五种常见的设计模式(转载)
很多人都想着写博客来记录编程生活中的点滴,我也不例外,但想了好长时间不知道写什么........万事开头难,先转载一篇吧..... 设计模式 一书将设计模式引入软件社区,该书的作者是 Erich Ga ...
- PHP中常见的五种设计模式
设计模式只是为 Java架构师准备的 — 至少您可能一直这样认为.实际上,设计模式对于每个人都非常有用.如果这些工具不是 “架构太空人” 的专利,那么它们又是什么?为什么说它们在 PHP 应用程序中非 ...
- 【转】五种常见的 PHP 设计模式
工厂模式 最初在设计模式 一书中,许多设计模式都鼓励使用松散耦合.要理解这个概念,让我们最好谈一下许多开发人员从事大型系统的艰苦历程.在更改一个代码片段时,就会发生问题,系统其他部分 —— 您曾认为完 ...
- 五种常见的 PHP 设计模式
设计模式 一书将设计模式引入软件社区,该书的作者是 Erich Gamma.Richard Helm.Ralph Johnson 和 John Vlissides Design(俗称 “四人帮”).所 ...
- C#游戏框架uFrame
C#游戏框架uFrame兼谈游戏架构设计 c#语言规范 阅读目录 1.概览 2.基本概念 3.依赖注入 4.Manager of Managers 5.利用UniRX实现响应式编程 6.研究总结 回到 ...
- 在 .NET Core 中使用 DiagnosticSource 记录跟踪信息
前言 最新一直在忙着项目上的事情,很久没有写博客了,在这里对关注我的粉丝们说声抱歉,后面我可能更多的分享我们在微服务落地的过程中的一些经验.那么今天给大家讲一下在 .NET Core 2 中引入的全新 ...
随机推荐
- SqlAlchenmy基本使用
#简单查询 print(session.query(User).all()) print(session.query(User.name, User.fullname).all()) print(se ...
- 洛谷P1228 分治
https://www.luogu.org/problemnew/show/P1228 我真傻,真的,我单知道这种题目可以用dfs剪枝过,没有想到还能构造分治,当我敲了一发dfs上去的时候,只看到一个 ...
- CodeForces755F 贪心 + 多重背包二进制优化
https://cn.vjudge.net/problem/615831/origin 题意 n个人; 计划是每个人都拿一个礼物来送给一个除了自己之外的人; 如果一个人没有送出礼物,那么它和它送礼 ...
- data_type
import logging logger = logging.getLogger("simple_example") logger.setLevel(logging.DEBUG) ...
- Ambari集成Kerberos报错汇总
Ambari集成Kerberos报错汇总 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看报错的配置信息步骤 1>.点击Test Kerberos Client,查看相 ...
- nginx之正向代理
1.概述 nginx的正向代理,只能代理http.tcp等,不能代理https请求.有很多人不是很理解具体什么是nginx的正向代理.什么是反向代理.下面结合自己的使用做的一个简介: 1)正向代理: ...
- 网络编程基础【day10】:我是一个线程(四)
本节内容 1.第一回 初生牛犊 2.第二回 渐入佳境 3.第三回 虎口脱险 4.第四回 江湖再见 第一回 初生牛犊 我是一个线程,我一出生就被编了个号:0x3704,然后被领到一个昏暗的屋子里,在这里 ...
- Web API中的路由(二)——属性路由
一.属性路由的概念 路由让webapi将一个uri匹配到对应的action,Web API 2支持一种新类型的路由:属性路由.顾名思义,属性路由使用属性来定义路由.通过属性路由,我们可以更好地控制We ...
- powershell 中常用cmd,unix命令(get-alias)
powershell 中常用cmd,unix命令(get-alias) Get-Content Alias cat -> Get-Content Alias gc -> Get-Conte ...
- 【leetcode-84】 柱状图中最大的矩形
(1pass,比较简单的hard) 给定 n 个非负整数,用来表示柱状图中各个柱子的高度.每个柱子彼此相邻,且宽度为 1 . 求在该柱状图中,能够勾勒出来的矩形的最大面积. 以上是柱状图的示例,其中每 ...