.net 我能否确保对于多个订阅者,此lambda函数每间隔仅调用一次?

.net 我能否确保对于多个订阅者,此lambda函数每间隔仅调用一次?,.net,xna,system.reactive,.net,Xna,System.reactive,我正在将基于XNA轮询的输入转换为基于可观察的输入。这里,GetPressedKeys()方法每20毫秒返回一个枚举键的可枚举项: Observable.Generate( Enumerable.Empty<Keys>(), pressed => true, pressed => Keyboard.GetState().GetPressedKeys(), pressed => pressed, pressed => Ti

我正在将基于XNA轮询的输入转换为基于可观察的输入。这里,GetPressedKeys()方法每20毫秒返回一个枚举键的可枚举项:

Observable.Generate(
    Enumerable.Empty<Keys>(),
    pressed => true,
    pressed => Keyboard.GetState().GetPressedKeys(),
    pressed => pressed,
    pressed => TimeSpan.FromMilliseconds(20),
    scheduler
).DistinctUntilChanged();
Observable.Generate(
Enumerable.Empty(),
按下=>true,
按下=>Keyboard.GetState().GetPressedKeys(),
按下=>按下,
按下=>TimeSpan.From毫秒(20),
调度程序
).DistinctUntilChanged();

我的问题是,这是为每一个订户。我知道Rx使用延迟求值,但我想以某种方式限制这个热可观察对象,使其每间隔仅执行一次GetPressedKeys()函数,即使有多个订户。这可能吗?

是的,您可以通过发布:

thatObservable = thatObservable.Publish().Refcount();
太好了,谢谢(很抱歉接受得太慢)-对于其他有类似问题的人,请查看