Если вы хотите, чтобы последний элемент был включен, вы можете объединить поток только с последним элементом вместе с обычным потоком, объединенным с TakeWhile
.Вот простое консольное приложение, чтобы доказать это:
var subject = new List<string>
{
"test",
"last"
}.ToObservable();
var my = subject
.Where(x => x == "last").Take(1)
.Merge(subject.TakeWhile(x => x != "last"));
my.Subscribe(
o => Console.WriteLine("On Next: " + o),
() => Console.WriteLine("Completed"));
Console.ReadLine();
Это печатает:
On Next: test
On Next: last
Completed
ОБНОВЛЕНИЕ Была ошибка, которая подавляла сообщение OnCompleted, если основнойНаблюдаемые на самом деле не завершены.Я исправил код, чтобы гарантировать, что OnCompleted
будет вызван
И если вы хотите избежать многократной подписки на базовую последовательность для холодных наблюдаемых, вы можете изменить код следующим образом:
var my = subject.Publish(p => p
.Where(x => x == "last").Take(1)
.Merge(p.TakeWhile(x => x != "last")));