[英]Rx.Net Using Observable.Create instead of Subject
我有使用主題創建可觀察對象的代碼。 我可以使用subject.onNext(value)將值傳遞給可觀察的流。 問題是,如果在值傳遞后我訂閱了該可觀察值,則我仍希望獲得該值。 據我所知,主體沒有抓住價值,他們只是像事件一樣傳遞它們。 因此,如何將這段代碼從使用subject更改為使用Observable。
private readonly Subject<int> _valueSubject = new Subject<int>();
public IObservable<int> ValueObservable => _valueSubject ;
public void SetValue(int valuePassedIn)
{
_valueSubject.OnNext(valuePassedIn);
}
編輯:發現您可以使用BehaviorSubject獲取最新值,但仍然想知道如何在這種情況下使用Observable.Create而不是Subject。
假設您不需要直接調用OnNext,那么您可能想要一個冷的可觀察對象:
IObservable<int> coldObservable = Observable.Create<int>(obs =>
{
obs.OnNext(1);
obs.OnNext(2);
obs.OnNext(3);
obs.OnCompleted();
return () => { };
});
否則,ReplaySubject將允許您保留一個大小可變的值緩沖區,該值將在每個觀察者訂閱時發出。 與記住我意識到的所有值並不完全相同,但是由於內存使用情況,這絕對不是一個好主意。 可能比BehaviourSubject提供的單個值更近。
下面將允許2個值可用於新訂戶:
ISubject<int> replaySubject = new ReplaySubject<int>(2);
IObservable<int> observable;
[TestMethod]
public void TestMethod()
{
observable = replaySubject;
replaySubject.OnNext(1);
replaySubject.OnNext(2);
replaySubject.OnNext(3);
replaySubject.OnNext(4);
replaySubject.OnNext(5);
observable.Subscribe(OnValue);
}
輸出:
觀察值:4觀察值:5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.