Реактив: пытаясь понять, как работает тема <T>

Пытаясь понять, какSubject<T>, ReplaySubject<T> и другие работы. Вот пример:

(Субъект является наблюдаемымand наблюдатель)

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());
     });

Случай 1: странная ситуация - когда я используюSubject<T> подписка не производится (???) - я никогда не вижу, чтобы & quot; X было: & quot; текст - я вижу только значение & quot; Значение: & quot; и & quot; Максимальное значение & quot; ... ПочемуSubject<T> не подталкивает значения к подписке?

Случай 2: если я используюReplaySubject<T> - Я вижу значения в подписке, но не могу применитьDefer вариант ни к чему. Не дляSubject а не в Observable .... Так что каждая подписка будет получать разные значения, потому чтоCreateObservable функцияcold наблюдаемым. ГдеDefer ?

Ответы на вопрос(2)

Ваш ответ на вопрос