Я пытаюсь реализовать дросселирование событий с реактивными расширениями. У меня есть система, где события могут быть подняты с высокой частотой для конкретного пользователя или другого типа объекта. Мне нужно отложить событие на определенное количество времени, и как только истечет время ожидания, поднимите событие с последним значением.Наблюдаемое дросселирование
Что я сделал это
private Subject<int> userBalanceObservable = new Subject<int>();
userBalanceObservable.Sample(TimeSpan.FromSeconds(sampleSeconds))
.Subscribe(sample => OnRaiseBalanceEvent(sample));
, когда происходит событие
userBalanceObservable.OnNext(userId);
Редактировать
Проблема с этим подходом является то, что событие вызывается для последнего значения, переданного to OnNext, то, что мне действительно нужно, это иметь dellay для каждого значения, переданного OnNext.
Например OnNext (1), OnNext (2), OnNext (3) я должен был бы иметь отложенный вызов для 1,2,3 вместо я получаю только последнее значение, которое 3.
В следующий раз попробуйте разместить Minimum Complete Верифицируемого Примера (http://stackoverflow.com/help/mcve), чтобы мы точно знали, чего вы пытаетесь достичь. Идеально с модульными испытаниями. –
Вам действительно нужно показать нам весь код - особенно то, что происходит в 'OnRaiseBalanceEvent', и как' userBalanceObservable' получает свои значения. Однако, как небольшой намек, если вы используете «тему», вы, вероятно, делаете что-то неправильно. – Enigmativity