Reativo: Tentando entender como o Subject <T> funciona
Tentando entender como oSubject<T>
, ReplaySubject<T>
e outro trabalho. Aqui está o exemplo:
(O assunto é observávele observador)
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());
});
Caso 1: A situação estranha é - quando eu usoSubject<T>
nenhuma assinatura é feita (???) - Eu nunca vejo o "X é:" texto - Eu só vejo o "Valor é:" e "Valor máximo é" ... Por queSubject<T>
não empurra valores para assinatura?
Caso 2: se eu usarReplaySubject<T>
- Eu vejo os valores na Assinatura, mas não pude aplicarDefer
opção para qualquer coisa. Não paraSubject
e não a Observable .... Então, cada assinatura receberá valores diferentes, porqueCreateObservable
função éfrio observável. Onde éDefer
?