2011-06-20 6 views
2

Я пытаюсь получить мою голову вокруг .NET Extensions Reactive, и мне интересно, если они могут быть использованы в сценарии последующей:Использование реактивных расширений для создания одного события?

В моем WP7 приложение, я использую SterlingDatabase сохраняться настройки приложения. Когда пользователь меняет настройки, я хочу периодически звонить Database.Flush()

Итак, в моем методе «Установить свойства» я хотел бы запустить событие таймера Database.Flush() и, скажем, через 5 секунд, написать база данных. Если другое свойство записано, я хочу перезапустить таймер.

Я знаю, что могу сделать это с помощью объекта таймера, вызвав Start() и Stop(), но я хотел знать, могу ли я сделать это с помощью Rx, чтобы создать операцию Asycn, которую я могу в принципе запускать и останавливать, без использования таймера ?

ответ

5

Использование дроссельной заслонки:

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

Dude. Это так гангстер. – Alan

+2

The Do() здесь не нужен. Просто 'Throttle(). Подписаться (_ => db.Flush())' будет работать –

+2

Скотт прав. Но мне также нравится идея побочного эффекта в .Do и использование параметра-less. Подпишитесь, чтобы настроить работу машины. Я думаю, что если разработчики будут ограничены только подписчиками без параметров, это поможет в понимании RX. –

Смежные вопросы