gpt4 book ai didi

c# Observable Subject 冷热

转载 作者:行者123 更新时间:2023-11-30 22:56:14 25 4
gpt4 key购买 nike

我经常遇到这样的情况,我想要一个 UI 元素来“观察”一个基础值——假​​设我正在显示一个 int——我想要一个我可以订阅的 IObservable。

我下面一直用的是Subject,直接设置就可以了。这真的很好用……除了第一次。如果我设置主题 - 然后稍后通过打开一个新的 UI 元素订阅它 - 它不会触发 onnext 直到下一次更改。

我基本上想要像主题一样工作的东西 - 但总是立即对任何新订阅者执行最新值的 onNext。

我知道我可以自己编写这样的结构 - 但它似乎是一个常见的用例 - 我是否缺少一些标准?

最佳答案

你想要 BehaviorSubject<T>ReplaySubject<T> .

BehaviorSubject<T>重播最近的单个值并要求您在构造函数中提供初始值。

你可以这样使用它:

var bs = new BehaviorSubject<int>(0);
bs.Subscribe(x => Console.WriteLine(x));
bs.OnNext(42);
bs.Subscribe(x => Console.WriteLine(x));

那会输出 0 , 然后 42 , 然后 42到控制台。

ReplaySubject<T>是更一般一点。它允许您指定要重放的值的数量,但不强制您提供初始值。

var rs = new ReplaySubject<int>(1);
rs.Subscribe(x => Console.WriteLine(x));
rs.OnNext(42);
rs.Subscribe(x => Console.WriteLine(x));

这会产生 42 , 然后 42到控制台。

将其与标准 Subject<T> 进行比较.

var s = new Subject<int>();
s.Subscribe(x => Console.WriteLine(x));
s.OnNext(42);
s.Subscribe(x => Console.WriteLine(x));

这只会产生 42 .

关于c# Observable Subject 冷热,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54552466/

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