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,但仅针对第一个订阅者?


- 输入按键事件处理程序 2022-01-01
- 如何用自己压缩一个 IEnumerable 2022-01-01
- C#MongoDB使用Builders查找派生对象 2022-09-04
- 在哪里可以找到使用中的C#/XML文档注释的好例子? 2022-01-01
- 良好实践:如何重用 .csproj 和 .sln 文件来为 CI 创建 2022-01-01
- WebMatrix WebSecurity PasswordSalt 2022-01-01
- MoreLinq maxBy vs LINQ max + where 2022-01-01
- Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式 2022-01-01
- C# 中多线程网络服务器的模式 2022-01-01
- 带有服务/守护程序应用程序的 Microsoft Graph CSharp SDK 和 OneDrive for Business - 配额方面返回 null 2022-01-01