Próbuję wykonać , który zwraca true
, jeśli komunikat UDP został odebrany w ciągu ostatnich 5 sekund i jeśli wystąpi przekroczenie limitu czasu, zwracana jest wartość false.Limit czasu reakcji, który nie zatrzymuje sekwencji?
Do tej pory mam to:
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));
}
na problemy z tym to: -
- Po fałszywym jest zwracany, sekwencja zatrzymuje
- ja tylko naprawdę trzeba
true
lubfalse
na zmiany stanu.
Mogę użyć Subject<T>
, ale muszę zachować ostrożność, aby pozbyć się UDPBaseStringListener
obserwowalnego, gdy nie ma już abonentów.
Aktualizacja
Za każdym razem pojawia się komunikat UDP chciałbym go zwrócić true
. Jeśli nie otrzymałem wiadomości UDP w ciągu ostatnich 5 sekund, chciałbym, aby zwróciła ona false
.
FYI, 'Timeout' ma przeciążenia, które ma zastępcę do zaobserwowania, gdy czas timeout występuje raczej niż "rzucanie" i potrzeba "Catch". –
Czytelnicy mogą również być zainteresowani [1] (http://stackoverflow.com/q/23394441/1267663), [2] (http://stackoverflow.com/q/12786901/1267663) oraz [3] (http://stackoverflow.com/q/35873244/1267663). – Whymarrh