Sto provando a creare un IObservable<bool>
che restituisce true
se un messaggio UDP è stato ricevuto negli ultimi 5 secondi e se si verifica un timeout, viene restituito un falso.Timeout di estensioni reattive che non interrompe la sequenza?
Finora ho questo:
public IObservable<Boolean> GettingUDPMessages(IPEndPoint localEP)
{
var udp = BaseComms.UDPBaseStringListener(localEP)
.Where(msg => msg.Data.Contains("running"))
.Select(s => true);
return Observable
.Timeout(udp, TimeSpan.FromSeconds(5))
.Catch(Observable.Return(false));
}
I problemi con questo sono: -
- Una volta che un falso viene restituito, la sequenza si ferma
- Ho solo davvero bisogno
true
ofalse
su cambiamenti di stato.
ho potuto utilizzare un Subject<T>
ma ho bisogno di stare attenti a smaltire l'UDPBaseStringListener
osservabile quando non ci sono più abbonati.
Aggiornamento
Ogni volta che ricevo un messaggio UDP vorrei che per restituire un true
. Se non ho ricevuto un messaggio UDP negli ultimi 5 secondi, mi piacerebbe che restituisse un false
.
FYI, 'Timeout' ha un overload che accetta un supplente osservabile per quando il tempo il timeout si verifica anziché "lanciare" e richiede 'Catch'. –
Anche i lettori potrebbero essere interessati a [1] (http://stackoverflow.com/q/23394441/1267663), [2] (http://stackoverflow.com/q/12786901/1267663) e [3] (http://stackoverflow.com/q/35873244/1267663). – Whymarrh