对于多个订阅者,我可以确保每个时间间隔只调用一次这个lambda函数吗?

时间:2013-01-28 23:28:37

标签: .net xna system.reactive

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

Observable.Generate(
    Enumerable.Empty<Keys>(),
    pressed => true,
    pressed => Keyboard.GetState().GetPressedKeys(),
    pressed => pressed,
    pressed => TimeSpan.FromMilliseconds(20),
    scheduler
).DistinctUntilChanged();

我的问题是这是为每个订阅者完成的。我知道Rx使用延迟评估,但我想以某种方式限制这个热的observable每个间隔只执行一次GetPressedKeys()函数,即使有多个订阅者。这可能吗?

1 个答案:

答案 0 :(得分:2)

是的,您可以通过Publish:

执行此操作
thatObservable = thatObservable.Publish().Refcount();