さて、Reactive ExtensionsのIObservable
Publishメソッドが返すのは、IConnectableObservable
早速試してみましょう。
namespace PublishSample { using System; using System.Collections.Generic; using System.Linq; class Program { static void Main(string[] args) { var subject = new Subject<int>(); IConnectableObservable<int> ob = subject.Publish(); // IConnectableObservable<int>をサブスクライブするぜ ob.Subscribe(Console.WriteLine); ob.Sum().Subscribe(i => Console.WriteLine("合計 : {0}", i)); // Connect前にいくら通知してもSubscribeしたところには届かない subject.OnNext(1); subject.OnNext(2); subject.OnNext(3); // 接続!! ob.Connect(); // Connectしたら値がSubscribeしたところまで届く subject.OnNext(11); subject.OnNext(12); subject.OnNext(13); subject.OnCompleted(); } } }
実行すると、以下のようになります。
11 12 13 合計 : 36
以上、簡単ですがPublishメソッドの使い方でした。