Hot変換メソッドであるPublishメソッドを紹介します。以下に簡単なサンプルを示します。ObservableであるObservable.Rangeメソッドに対してPublishメソッドをチェインしています。ここでは省略のためにvarを使っていますが、戻り値としてはIConnectableObservable<int>が返っています。Observableとなります。結果にもあるように、Subscribeメソッドを呼び出した段階では値が流れていません。Connectメソッドを呼び出したとき、すべての値が一気にが流れています。このとき、値はA、Bの両方に配信されていることが確認できます。OnCompletedしか呼び出されません。(すでにすべての値が流出してダムが空になっているので)Observable.Publish(initialValue)Publishメソッドには、引数に初期値を受けるものがあります。その例を以下に示します。Mainメソッド以外は同じなので割愛します。-----*/コメントと結果の通り、Subscribe実行時に引数で指定した初期値が渡っています。Publishメソッドが堰き止めるのはPublishメソッドより前から流れてくるものだけで、初期値は対象外です。初期値はPublishメソッドから流れてくるので、Publishメソッドのひとつ前のDoメソッドを通過することはありません。初期値が渡ってくること以外は、引数なしのPublishメソッドと同じです。ここで初めて利用したDoメソッドは、Subscribeメソッドと同じく流れてくる値を受けて処理を行う関数です。流れてきた値をそのまま値を通過させる点がSubscribeメソッドとの違いです。シーケンスの途中でトレースなどの処理を挟み込むのに便利です。Observable.ReplayObservable.Replayメソッドは、Connectメソッド呼び出し後にSubscribeした場合に、Connectメソッド呼び出し前に流した値を再生するものです。以下にサンプルを示します。-----*/Publishメソッドの違いは1点で、購読者A、Bに流した値を購読者Cにも配信しているところです。上記のサンプルではすべての値を再配信しましたが、これ以外にも再生する値の個数を制限したり、直近の一定時間内に配信したものだけを再生するといった機能を持つオーバーロードがあります。Observable.PublishLastObservable.PublishLastメソッドは、その名の通り最新の値のみを配信するものです。以下にサンプルを示します。-----*/これはこれまでのサンプルと違い、Connectメソッドの呼び出し前に登録した購読者A、Bに対しても最新の値のみを通知します。購読者Cについては言わずもがなです。非同期処理のシーケンス化で見た非同期処理の挙動とそっくりです。Hot変換の中でも最も汎用的なメソッドであるObservable.Multicastメソッドです。TResult>インターフェースを取ります。Subjectの亜種で紹介した各種Subject<T>を与えることができます。以下にその例を示します。PublishLast()上記のコメントにもありますが、実は先に紹介した変換メソッドはMulticastメソッドに各種Subject<T>を与えたものです。「全部ショートカットメソッドがあるならMulticastなんて要らないじゃないか!」と思いたくもなりますが、カスタムSubjectに対する汎用的な道を残しているのだと思います。今回はColdなObservableをHotなObservableに変換するメソッドについて見てきました。便利な感じがしてきましたね!次回はスケジューラーによるスレッドの切り替えについて触れてみようと思います。一応次回で入門の連載はおしまいのつもりです。(1)月別アーカイブはてなブログをはじめよう!xin9leさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。