Observable.TakeWhileを使用すると、条件が真である限りシーケンスを実行できます(デリゲートを使用して、実際のシーケンスオブジェクトで計算を実行できるようにします)が、各要素の前にこの条件をチェックします。各要素の後で同じチェックを実行するにはどうすればよいですか?
次のコードは問題を示しています
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;
}
この出力
1 of 3
2 of 3
3番目の要素を取得できません
この例を見ると、私がしなければならないのは私の状態をそのように変えることだけだと思うかもしれません-
var obs = listOfCommands.ToObservable().TakeWhile(c => c.CurrentIndex <= c.TotalCount);
しかし、その後、observableは決して完了しません(私の実際のコードでは、これらの3つのコマンドの後でストリームが終了しないため)