RX Observable.TakeWhile sprawdza warunek PRZED każdym elementem, ale muszę wykonać sprawdzenie po

Observable.TakeWhile pozwala uruchomić sekwencję tak długo, jak długo warunek jest prawdziwy (za pomocą delegata, abyśmy mogli wykonywać obliczenia na rzeczywistych obiektach sekwencji), ale sprawdza ten warunek PRZED każdym elementem. Jak mogę wykonać ten sam test, ale PO każdym elemencie?

Poniższy kod demonstruje problem

    void RunIt()
    {
        List<SomeCommand> listOfCommands = new List<SomeCommand>();
        listOfCommands.Add(new SomeCommand { CurrentIndex = 1, TotalCount = 3 });
        listOfCommands.Add(new SomeCommand { CurrentIndex = 2, TotalCount = 3 });
        listOfCommands.Add(new SomeCommand { CurrentIndex = 3, TotalCount = 3 });

        var obs = listOfCommands.ToObservable().TakeWhile(c => c.CurrentIndex != c.TotalCount);

        obs.Subscribe(x =>
        {
            Debug.WriteLine("{0} of {1}", x.CurrentIndex, x.TotalCount);
        });
    }

    class SomeCommand
    {
        public int CurrentIndex;
        public int TotalCount;
    }

To wyjście

1 of 3
2 of 3

Nie mogę zdobyć trzeciego elementu

Patrząc na ten przykład, możesz pomyśleć, że wszystko, co muszę zrobić, to tak zmienić stan -

var obs = listOfCommands.ToObservable().TakeWhile(c => c.CurrentIndex <= c.TotalCount);

Ale wtedy obserwowalność nigdy się nie zakończy (ponieważ w moim prawdziwym kodzie strumień nie kończy się po tych trzech poleceniach)

questionAnswers(5)

yourAnswerToTheQuestion