Reaktiv: Versucht zu verstehen, wie Subjekt <T> funktioniert
Ich versuche zu verstehen, wie das gehtSubject<T>
, ReplaySubject<T>
und andere Arbeiten. Hier ist ein Beispiel:
(Betreff ist beobachtbarund Beobachter)
public IObservable<int> CreateObservable()
{
Subject<int> subj = new Subject<int>(); // case 1
ReplaySubject<int> subj = new ReplaySubject<int>(); // case 2
Random rnd = new Random();
int maxValue = rnd.Next(20);
Trace.TraceInformation("Max value is: " + maxValue.ToString());
subj.OnNext(-1); // specific value
for(int iCounter = 0; iCounter < maxValue; iCounter++)
{
Trace.TraceInformation("Value: " + iCounter.ToString() + " is about to publish");
subj.OnNext(iCounter);
}
Trace.TraceInformation("Publish complete");
subj.OnComplete();
return subj;
}
public void Main()
{
//
// First subscription
CreateObservable()
.Subscribe(
onNext: (x)=>{
Trace.TraceInformation("X is: " + x.ToString());
});
//
// Second subscribe
CreateObservable()
.Subscribe(
onNext: (x2)=>{
Trace.TraceInformation("X2 is: " + x.ToString());
});
Fall 1: Die seltsame Situation ist - wenn ich es benutzeSubject<T>
Es wird kein Abonnement abgeschlossen (???) - Ich sehe nie den Text "X is:" - Ich sehe nur "Value is:" und "Max value is" ... WarumSubject<T>
Push-Werte nicht zum Abonnement?
Fall 2: Wenn ich benutzeReplaySubject<T>
- Ich sehe die Werte im Abonnement, konnte mich aber nicht bewerbenDefer
Option auf alles. Nicht zuSubject
und nicht zu beobachten .... Also jedes Abo bekommt da andere WerteCreateObservable
Funktion istkalt beobachtbar. Wo istDefer
?