- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用响应式(Reactive)扩展 (Rx) 来创建一个热可观察对象,多个用户都可以订阅该对象,所有这些用户都可以获得推送给他们的值。我可以使用以下主题来做到这一点:
var subj = new Subject<int>();
var observable = subj.AsObservable();
observable.Subscribe(x => Console.WriteLine("1 Number: {0}", x));
observable.Subscribe(x => Console.WriteLine("2 Number: {0}", x));
subj.OnNext(1);
subj.OnNext(2);
subj.OnNext(3);
//and so on
但我读到主题是用于“实验”用途的,我想使用 Observable.Create 工厂方法做同样的事情。我环顾四周,发现有很多使用 Create 方法创建冷可观察对象的示例,但我希望具有与上面代码产生的行为相同的行为。
感谢您的帮助。
尼克
最佳答案
您的问题可以分成两个单独的问题。
<强>1。如何创建没有主题的 Observable?
有很多方法,listed in this perfect book . Observable.Create
只是其中之一,但为了获得像您的示例 (1, 2, 3) 中那样的一系列值,我会简单地使用
var source = Observable.Range(1, 3);
但是,您可能已经注意到,以这种方式创建的流将是冷可观察对象。这就引出了第二个问题:
<强>2。如何将冷 Observable 变为热 Observable 并在订阅者之间共享结果?
为此,您需要一个 Publish
功能。它允许在订阅者之间共享 Rx 流。试试这个:
var sourceHot = Observable.Range(1, 3).Publish();
sourceHot.Subscribe(x => Console.WriteLine("1 Number: {0}", x));
sourceHot.Subscribe(x => Console.WriteLine("2 Number: {0}", x));
var disp = sourceHot.Connect();
请注意,如果您不想手动调用 Connect
/Disconnect
, 您可以使用一个RefCount功能。另请注意 stream.Publish()
与调用 stream.Multicast(new Subject<T>())
完全一样.
我强烈推荐阅读 Sharing in RX: Publish, Replay, and Multicast article ,深入解释了这个主题。
关于c# - Rx 将 subject 的使用转换为 Observable.Create 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34308299/
如果 Subject 继承自 Observable,那么基于任何 Subject 的下一个选项有什么区别,例如: private val locationSubject: ReplaySubject
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我正在尝试从内部使用 Rx.Subject 的函数返回一个可观察对象。当然,与任何好的 API 一样,实现细节应该完全从消费者那里抽象出来。但是,使用 Subject.asObservable() 似
我使用 angular2 rxjs 来测试它的多播功能,这是我的代码: var source = Observable.from([1, 2, 3]); var subject = new Subje
我需要一个可以显示每个主题的最高分数计数的查询。假设 3 名学生的科学成绩需要达到 98 分 count marks subject 3 98 Maths 最佳答案 首先找到每个
我正在使用JavaFX 11(OpenFX)运行一些应用程序。该应用程序是用IntellijIdea编写的,并使用gradle构建。在IDE中运行时,一切正常。构建jar时,它构建成功,但是当我尝试执
我继承自模板类。当我进入教师类(class)时,我想进入学科类(class),反之亦然。我收到错误 Invalid use of incomplete type struct Subect; void
Angular 2 和 Typescript 应用。 我在 NPM 包中有一个抽象类,我试图在我的应用程序代码中提供实现。这一切都很好,直到我添加了公众 isLoggedIn:Subject;属性(p
我从 this tutorial 中提取了示例模板代码并执行以下两个步骤开始 - npm install//工作正常并创建了包含所有依赖项的 node_modules 文件夹 npm 开始//失败并出
我需要答案来显示最低分和最高分,同时给出正确的主题 import java.util.Scanner; //import package class Task11 { public stati
如果我的这个类有一个在其生命周期中发出单一值的主题: export class MyClass { myEmitter$: Subject = new Subject(); someMetho
我正在尝试用 ionic 制作一个小应用程序,但是当我从 UI 调用 $scope.saveClass() 函数时它给了我这个错误。 无法获取未定义或空引用的属性“subject” 我不明白,因为他不
背景 我有一个核心数据实体 Entry 与另一个实体 DataField 有关系: class Entry: NSManagedObject { //[...] @NSManaged
我知道这个问题更像是一个语法问题,但是如果你有一组 Penn Treebank 标记,你如何确定句子的“主题”,例如: [WP][VBZ][DT][NN] 是否有任何 Java 库可以接收此类标记并确
我使用 SwiftUI 构建了一个 LoadingView,用于在我从 API 获取远程数据时显示我的应用程序中的一些加载内容。我正在使用 Xcode 版本 11.0 beta 5。 这是Loadin
Subjects 介绍 1. Subjects 是订阅者,也是Observable 订阅者:它能动态的接收新的值。 Observable: 当Subjects有了新值后会通过Event将新值发
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 8年前关闭。 Improve thi
我需要了解主题在 Weblogic 中如何存储和传播。 经过身份验证后,主题存储在 HTTP 层的哪里?在内部,它存储在 HTTPSession 中吗? 同理,EJB层存储在哪里? 我有一个应用程序,
我经常遇到这样的情况,我想要一个 UI 元素来“观察”一个基础值——假设我正在显示一个 int——我想要一个我可以订阅的 IObservable。 我下面一直用的是Subject,直接设置就可以了
我有一个简单的服务。 import { Injectable } from '@angular/core'; @Injectable({ providedIn: 'root' }) export cl
我是一名优秀的程序员,十分优秀!