【问题标题】:Using Reactive Extensions to create a single event?使用 Reactive Extensions 创建单个事件?
【发布时间】:2011-06-21 08:41:07
【问题描述】:

我正在尝试了解 .NET 反应式扩展,我想知道它们是否可以用于以下场景:

在我的 WP7 应用程序中,我使用 SterlingDatabase 来保存应用程序设置。当用户修改设置时,我想定期调用Database.Flush()

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

我知道我可以使用计时器对象来执行此操作,调用 Start()Stop(),但我想知道是否可以使用 Rx 执行此操作,以创建一个基本上可以启动和停止的 Asycn 操作,无需使用计时器?

【问题讨论】:

    标签: system.reactive


    【解决方案1】:

    使用油门:

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

    【讨论】:

    • 这里不需要 Do()。只要Throttle().Subscribe(_ =&gt; db.Flush()) 就可以了
    • 斯科特是对的。但我也喜欢在 .Do 中产生副作用并使用无参数 .Subscribe 来设置机器运行的想法。我认为如果开发人员仅限于无参数订阅,这将有助于理解 RX。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 1970-01-01
    相关资源
    最近更新 更多