У меня есть Session
и Service
. Service
может иметь несколько Sessions
. Каждый Session
получил IObservable<SessionState>
свойство.
Чего я хочу достичь:
Если все Session.States
равны NotConnected
, тогда Service
должен вызвать Foo()
. У меня уже есть решение, но я не думаю, что это reactive way
, как это сделать.
public class Session
{
public SessionState ActualState => _SessionStateSubject.Value;
public IObservable<SessionState> State => _SessionStateSubject.AsObservable();
private readonly BehaviorSubject<SessionState> _SessionStateSubject = new BehaviorSubject<SessionState>(SessionState.NotConnected);
public void Initialize()
{
_SessionStateSubject.OnNext(SessionState.Initializing);
}
}
public class Service
{
private List<Session> _Sessions = new List<Session>();
public void SubscribeToChannels()
{
foreach (Session session in _Sessions)
{
session.State.TakeUntil(s => s == SessionState.NotConnected).Subscribe(state =>
{
// check all other sessions
if(_Sessions.All(s => s.ActualState == SessionState.NotConnected))
Foo();
});
}
}
public void Foo()
{
// this should be called if all of them are 'NotConnected'
}
}