试图了解Subject<T>
,ReplaySubject<T>
和其他的工作原理。这是示例:
(主题是可观察的和观察者)
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>
没有订阅(???) - 我从来没有看到“X is:”文本 - 我只看到“Value is:”和“Max value is”......为什么不Subject<T>
将值推送到订阅?
案例 2:如果我使用ReplaySubject<T>
- 我确实看到了 Subscription 中的值,但我无法将Defer
选项应用于任何内容。Not to Subject
and not to Observable....所以每个订阅都会收到不同的值,因为CreateObservable
函数是冷可观察的。在哪里Defer
?