IObservableを作成する
ソースコードが吹き飛んで心が折れたので、更新していなかったのですが1年ぶりに記事だけの提供にします。
CreateはIObservableの挙動を定義して文字通り好きなIObservableを定義するメソッドです。
これを理解するにはそもそものIObservableとIObserverの理解が必要になります。
ColdなIObservableとは何なのかソースコードを読んで理解してみる
自分で書いた記事ですが、とりあえずIObservableとIObserverが何をしているかを書いているので読んでみるといいかも。
Createメソッドとは
簡単に言うとIObservableの役割はSubscribeされたときに引数のIObserverに対して、各々決められたタイミングでOnNext,OnError,OnCompleteの処理をしてそれを中断するキャンセルトークンであるIDisposableを返すことです。
ですからCreateはこのSubscribeされたときの挙動をそのまま指定してIObservableを作成するメソッドになります。
そうみるとCreateの以下の定義は素直にSubscribeされたときの挙動を定義する。ということが見て取れます。
public static IObservable<T> Create<T>(Func<IObserver<T>, IDisposable> subscribe)
作ってみる
実際に
1,1,2,3,5とデータが流れてくるIObservableを作成してみます。
Observable.Create<int>(observer =>
{
observer.OnNext(1);
observer.OnNext(1);
observer.OnNext(2);
observer.OnNext(3);
observer.OnNext(5);
return Disposable.Empty;
}).Subscribe(i =>
{
Debug.Log(i);
});
このような形でSubscribeしてきたobserverにOnNextしていけばいいわけです。
今回はキャンセルするものがなかったので、Emptyを返していますが、RxにはいくつかのIDisposableクラスが用意されているのでそれを使って返します。
このメソッドが使えるとどんなものも簡単にRx化できるので大変便利です。
(まぁぶっちゃけ、かなりのことがこのメソッド使わずにできるので使うことあんまないんですけどね)