2016-07-24 6 views
1

Ich möchte die Observable basierend auf einem Ereignis beenden, wenn ein Wert nicht innerhalb eines bestimmten Zeitraums empfangen wird.Wie beende ich eine heiße Observable?

// This will go on forever because it is a hot 
// observable based on an event 
// If a value has not been produced in, say, 2 seconds 
// I would like to stop it and raise an OnCompleted 
var observable = Observable.FromEvent(...); 

Ich könnte ein TakeUntil wie so tun, aber das wäre eine absolute Zeitdauer vom Beginn des Bezugs sein. Was ich will, ist, wenn ein Wert nicht zurückgegeben wurde, sagen wir, 2 Sekunden von dem Zeitpunkt, als der vorherige Wert generiert wurde, dann stoppen und ein OnCompleted Ereignis auslösen.

Wenn von der Observablen 2 Sekunden lang kein Wert generiert wurde, stoppen und erhöhen Sie ebenfalls ein OnCompleted Ereignis.

Wie würde ich das tun, ohne dass der Client-Code diesen Status beibehalten muss, zu welcher Zeit der letzte Wert generiert wurde?

Antwort

2

Try this:

var query = observable.Timeout(TimeSpan.FromSeconds(2.0), Observable.Empty<int>()); 

Gerade int ersetzen mit welcher Art auch immer Ihre Quelle zu beobachten ist.