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 ?

questionAnswers(2)

yourAnswerToTheQuestion