An Rx observable that would act as ReplaySubject but only for the 1st subscriber?(一个Rx可观测对象,将作为ReplaySubject,但仅针对第一个订阅者?)
问题描述
合成类似 这是.NET项目的答案,但我同样希望得到JavaScript/RxJS的回答。 我在谷歌上寻找了潜在的解决方案,最终我将推出我自己的解决方案,类似于how I approached 我稍微修改了similar question中的实现,将类的名称从ReplaySubject但仅向第一个订阅者(当该订阅者连接时)发出一次累积序列的Rx可观测对象的优雅方法是什么?第一次订阅后,它应该与常规Subject一样。
DistinctSubject。推荐答案
ReplayOnceSubject改为ReplayFirstSubscriberOnlySubject:
这可能不是最有效的解决方案,因为每个操作都会获取两个不同的([2-4]和[2-5]),但它
应该也不会很糟糕。public class ReplayFirstSubscriberOnlySubject<T> : ISubject<T>
{
private readonly object _locker = new object();
private ISubject<T> _subject = new ReplaySubject<T>();
public void OnNext(T value) { lock (_locker) _subject.OnNext(value); }
public void OnError(Exception error) { lock (_locker) _subject.OnError(error); }
public void OnCompleted() { lock (_locker) _subject.OnCompleted(); }
public IDisposable Subscribe(IObserver<T> observer)
{
if (observer == null) throw new ArgumentNullException(nameof(observer));
lock (_locker)
{
if (_subject is ReplaySubject<T> replaySubject)
{
var subject = new Subject<T>();
var subscription = subject.Subscribe(observer);
// Now replay the buffered notifications
replaySubject.Subscribe(subject).Dispose();
replaySubject.Dispose();
_subject = subject;
return subscription;
}
else
return _subject.Subscribe(observer);
}
}
}
这篇关于一个Rx可观测对象,将作为ReplaySubject,但仅针对第一个订阅者?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:一个Rx可观测对象,将作为ReplaySubject,但仅针对第一个订阅者?
基础教程推荐
- 从 C# 控制相机设备 2022-01-01
- 如果条件可以为空 2022-01-01
- C# 9 新特性——record的相关总结 2023-04-03
- 更新 Visual Studio 中的 DataSet 结构以匹配新的 SQL 数据库结构 2022-01-01
- 获取C#保存对话框的文件路径 2022-01-01
- SonarQube C# 分析失败“不是指针的有效行偏移" 2022-01-01
- Mono https webrequest 失败并显示“身份验证或解密失败" 2022-01-01
- 重新排序 WPF TabControl 中的选项卡 2022-01-01
- 在 VB6 或经典 ASP 中使用 .NET 2022-01-01
- 将数据集转换为列表 2022-01-01
