Estoy tratando de hacer un IObservable<bool>
que devuelve true
si se ha recibido un mensaje UDP en los últimos 5 segundos y si se produce un tiempo de espera, se devuelve un falso.Extensiones reactivas ¿Tiempo de espera que no detiene la secuencia?
Hasta ahora tengo esto:
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));
}
Los problemas con esto son: -
- Una vez que se devuelve una falsa, la secuencia se detiene
- lo único que realmente necesitan
true
ofalse
en cambios de estado.
que podría utilizar un Subject<T>
pero hay que tener cuidado para disponer de la UDPBaseStringListener
observable cuando no hay más suscriptores.
actualización
Cada vez que sale un mensaje UDP me gustaría que vuelva un true
. Si no he recibido un mensaje UDP en los últimos 5 segundos, me gustaría que devuelva un false
.
FYI, 'Timeout' tiene una sobrecarga que lleva un suplente observables para cuando llegue el momento se produce el tiempo de espera en lugar de "lanzar" y necesita 'Catch'. –
Los lectores también pueden estar interesados en [1] (http://stackoverflow.com/q/23394441/1267663), [2] (http://stackoverflow.com/q/12786901/1267663) y [3] (http://stackoverflow.com/q/35873244/1267663). – Whymarrh