Rx について学ぶ中で、 The Observable Contractで詳しく説明されている、Observableに関する頻繁に繰り返されるルールに出くわしました。
OnCompleted または OnError 通知を発行すると、それ以降は通知を発行できません。
Observable が完了した後も値を生成し続けると混乱するため、これは理にかなっていますが、.NET で Observable.Range メソッドをテストしたところ、その動作を示さないことに気付きました。多くのObservable がこのルールに違反しています。
var rangeObservable = Observable.Range(0, 5);
rangeObservable.Subscribe(Console.WriteLine, () => Console.WriteLine("Done first!"));
Console.ReadLine();
rangeObservable.Subscribe(Console.WriteLine, () => Console.WriteLine("Done second!"));
Console.ReadLine();
//Output:
//0
//1
//2
//3
//4
//Done first!
//0
//1
//2
//3
//4
//Done second!
明らかに2 回rangeObservable
呼び出され、最初の の後に値が生成されました。これは、これがObservablesに関する規則ではなく、 Subscriptionsに関する規則であると私に信じさせます。つまり、各サブスクリプションが 1 つの終了メッセージのみを受信し、それ以降メッセージを受信しない限り、 Observableは必要な数の終了メッセージを生成し、その後に値を生成することさえできます。OnComplete
OnComplete
Observableと表示されている場合、実際にはSubscriptionを意味しますか? それらは本当に別のものですか?モデルについて根本的な誤解がありますか?