gpt4 book ai didi

c# - 跟踪 Observable 中的(数量)观察者?

转载 作者:太空狗 更新时间:2023-10-29 19:52:01 26 4
gpt4 key购买 nike

我有一个代表股票价格流的可观察对象。如果我的可观察序列上没有观察者,我希望能够断开与提供价格流的远程服务器的连接,但我不想在每个观察者都调用 Dispose() 之前这样做。然后以类似的方式,当第一个人调用订阅时,我想重新连接到远程服务器。

有没有办法计算出有多少观察者调用了一个可观察对象的订阅?或者也许是一种了解观察者何时调用 Subscribe 或 Dispose 的方法?

最佳答案

我只会使用 RefCount/Publish。我总是觉得,如果我正在实现 IObservable,我工作太辛苦了。

myColdObservable.Publish().RefCount();

这将使您的 observable 在每个人都断开连接后停止脉动。这是一个示例:

var coldObservable = Observable
.Interval(TimeSpan.FromSeconds(1))
.ObserveOn(Scheduler.TaskPool)
.Select(_ => DoSomething());

var refCountObs = coldObservable.Publish().RefCount();

CompositeDisposable d = new CompositeDisposable();
d.Add(refCountObs.Subscribe(n => Console.WriteLine("First got: " + n)));
d.Add(refCountObs.Subscribe(n => Console.WriteLine("Second got: " + n)));
d.Add(refCountObs.Subscribe(n => Console.WriteLine("Third got: " + n)));

//Wait a bit for work to happen
System.Threading.Thread.Sleep(10000);

//Everyone unsubscribes
d.Dispose();

//Observe that DoSomething is not called.
System.Threading.Thread.Sleep(3000);

这不包括您实际想知道订阅者的数量的情况,但我认为这符合您在没有订阅者时停止工作的要求。

关于c# - 跟踪 Observable 中的(数量)观察者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10838847/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com