Дроссель также задерживает первый образец - PullRequest
4 голосов
/ 16 октября 2011

Я пытаюсь приручить событие, вызванное клавиатурой, которое без дросселирования будет запускаться с очень высокой частотой. Приведенный ниже код работает, но он также задерживает первый вызов GlobalCopy на период регулирования. Есть ли способ получить первый образец без задержки?

observableGlobalCopy = Observable
  .FromEventPattern<EventHandler, EventArgs>(h => this.GlobalCopy += h, h => this.GlobalCopy -= h);

observableGlobalCopy
    .SubscribeOnDispatcher()
    .Throttle(GlobalEventThottle)
    .Subscribe(x => GlobalCopyHandler());

Ответы [ 2 ]

5 голосов
/ 16 октября 2011

Вы можете попробовать что-то вроде этого:

var observableGlobalCopy2 = observableGlobalCopy
    .Window(() => Observable.Timer(TimeSpan.FromSeconds(1.0)))
    .Select(_ => _.Take(1))
    .Merge();
0 голосов
/ 16 октября 2011

Если я правильно понимаю ваши требования, как насчет этого?

observableGlobalCopy.Take(1)
    .Concat(
        observableGlobalCopy.Throttle(GlobalEventThottle))
    .SubscribeOnDispatcher()
    .Subscribe(x => GlobalCopyHandler());
...