我知道以下是一个阻塞调用,并且将以可观察的顺序返回第一个值:
var result = myObservable.First();
根据我使用的主题类型,这会有不同的含义:
现在,我试图找到一种一致的方法来获取最后一个值,而不管使用的是哪个基础Observable。
有任何想法吗?
最佳答案
根据您的其他接收问题,我认为您需要这样做:
var rootSubject = new ReplaySubject<Types>();
var firstSubject = rootSubject.Where(x => x == Types.First);
var secondSubject = rootSubject.Where(x => x == Types.Second);
var thirdSubject = rootSubject.Where(x => x == Types.Third);
var forthSubject = rootSubject.Where(x => x == Types.Fourth);
var mergedSubject = Observable
.Merge(firstSubject, secondSubject, thirdSubject, forthSubject)
.Timeout(TimeSpan.FromSeconds(2), Observable.Return(Types.Error))
.Replay();
mergedSubject.Connect();
rootSubject.OnNext(Types.First);
rootSubject.OnNext(Types.Second);
var result = mergedSubject.First();
rootSubject.OnNext(Types.Third);
rootSubject.OnNext(Types.Fourth);
Console.WriteLine(String.Format("result - {0}", result));
现在,使用哪种主题都无所谓,它们都返回“结果-第一”。
如果要在调用mergedSubject.First()之前获取最新值,则可以使用Replay(1):
var mergedSubject = Observable
.Merge(firstSubject, secondSubject, thirdSubject, forthSubject)
.Timeout(TimeSpan.FromSeconds(2), Observable.Return(Types.Error))
.Replay(1);
在这种情况下,所有主题类型都将返回“结果-第二”。
关于c# - 活性: Latest value to be received by IObservable,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5235140/