Mam dwa strumienie sygnalizujące, gdy niektóre warunki ulegną zmianie. Muszę obserwowanej który będzie ogień true
gdy wszystkie warunki włączyć true
. false
, gdy którykolwiek z nich zamienia się na . Jeśli niektóre warunki to false
, a kolejne zmiany to false
, nie muszę zgłaszać zdarzeń.Łączenie obserwowalnych obiektów logicznych
Oto jak ja to robię:
// Introducing current states
private bool cond1 = false;
private bool cond2 = false;
void MyHandlingMethod(IObservable<bool> c1, IObservable<bool> c2)
{
c1.Subscribe(b => _state1 = b);
c2.Subscribe(b => _state2 = b);
var c3 = c1.Merge(c2).Select(_ => _cond1 && _cond2);
c3.Subscribe(b => /* some action goes here /*);
// ...
}
Chcę wiedzieć, czy jest to właściwy sposób rozwiązać mój problem i czy są jakieś pitfals. Np. Subskrypcja c3 uruchamia się przed c1 i c2 z powodu asynchronicznej natury rx.
Humbug - Przeglądam API przez wieki i nie udało mi się tego znaleźć! Prawdopodobnie jednak chcesz również "DistinctUntilChanged". –
[My go-RX odniesienia API] (http://www.introtorx.com/content/v1.0.10621.0/12_CombiningSequences.html) - w CombineLatest przykładem jest dokładny to pytanie – AlexFoxGill
nie sądzę, to całkowicie (!) spełnia wymagania. Tylko jeśli wszystkie wartości są fałszywe, jeśli sekwencja daje wartość false, inaczej milczy. Jeśli wszystkie wartości są prawdziwe, naciśnij prawdę. Ten soln będzie wypychał fałsz, jeśli dowolna wartość jest fałszywa. –