Я хочу эффективно регулировать поток событий, чтобы мой делегат вызывался при получении первого события, но не в течение 1 секунды, если получены последующие события. По истечении этого тайм-аута (1 секунда), если было получено последующее событие, я хочу, чтобы мой делегат был вызван.
Есть ли простой способ сделать это с помощью Reactive Extensions?
Образец кода:
static void Main(string[] args)
{
Console.WriteLine("Running...");
var generator = Observable
.GenerateWithTime(1, x => x <= 100, x => x, x => TimeSpan.FromMilliseconds(1), x => x + 1)
.Timestamp();
var builder = new StringBuilder();
generator
.Sample(TimeSpan.FromSeconds(1))
.Finally(() => Console.WriteLine(builder.ToString()))
.Subscribe(feed =>
builder.AppendLine(string.Format("Observed {0:000}, generated at {1}, observed at {2}",
feed.Value,
feed.Timestamp.ToString("mm:ss.fff"),
DateTime.Now.ToString("mm:ss.fff"))));
Console.ReadKey();
}
Текущий выход:
Running...
Observed 064, generated at 41:43.602, observed at 41:43.602
Observed 100, generated at 41:44.165, observed at 41:44.602
Но я хочу наблюдать (временные метки, очевидно, изменятся)
Running...
Observed 001, generated at 41:43.602, observed at 41:43.602
....
Observed 100, generated at 41:44.165, observed at 41:44.602
x => x <= 100
;) - person Oliver   schedule 09.07.2010