Chcę skutecznie ograniczać strumień zdarzeń, aby mój uczestnik został wywołany po odebraniu pierwszego zdarzenia, ale nie przez 1 sekundę, jeśli zostaną odebrane kolejne zdarzenia. Po upływie tego limitu czasu (1 sekunda), jeśli zostało odebrane kolejne wydarzenie, chcę, aby został wezwany mój pełnomocnik.Jak ograniczać strumień zdarzeń za pomocą RX?
Czy istnieje prosty sposób na wykonanie tego przy użyciu rozszerzeń reaktywnych?
Przykładowy kod:
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();
}
Prąd wyjściowy:
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
Ale chcę obserwować (znaczniki czasu oczywiście zmieni)
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
To tylko chłodny rachunek lambda 'x => x <= 100';) – Oliver