如果你想在最后一个元素被列入你只能与最后一个元素连同常规流与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
UPDATE 有是supressed的OnCompleted消息,如果底层的可观测其实并没有完整的错误。我纠正了代码,以确保OnCompleted
被称为
如果你想避免冷观测多次订阅基础序列可以重构这样的代码:
var my = subject.Publish(p => p
.Where(x => x == "last").Take(1)
.Merge(p.TakeWhile(x => x != "last")));
不错!花了我几秒钟来看看它是如何完成的。也许更好写:subject.TakeWhile(x => x!=“last”)。合并(subject.Where(x => x ==“last”)。Take(1)); 冷可观察的提示是+。谢谢 – lukebuehler