使用Reactive Extensions创建单个事件?

Ala*_*lan 2 system.reactive

我试图了解.NET Reactive Extensions,我想知道它们是否可以用于以下场景:

在我的WP7应用程序中,我使用SterlingDatabase来保留应用程序设置.当用户正在修改设置时,我想定期打电话Database.Flush()

因此,在我的Property Set方法中,我想启动Database.Flush()计时器事件,并在5秒内写入数据库.如果写入另一个属性,我想重新启动计时器.

我知道我可以用一个定时器对象做到这一点,调用Start()Stop(),但我想知道如果我能做到这一点,其中Rx,创建一个Asycn操作,我基本上可以开始与停止,不需使用定时器?

Ser*_*hov 5

使用节流阀:

public void AttachFlushes(IObservable<Unit> writes, SterlingDb  db)
{
    writes.Throttle(TimeSpan.FromSeconds(5)).Do(_ => db.Flush()).Subscribe();
}
Run Code Online (Sandbox Code Playgroud)

  • 这里不需要Do().只是`Throttle().订阅(_ => db.Flush())`会起作用 (2认同)
  • 斯科特是对的.但我也喜欢在.Do和使用无参数.Subscribe只是设置机器运行的副作用的想法.我认为如果开发人员仅限于无参数的订阅,那么它将有助于理解RX. (2认同)