さて、これまでIObservable
全部は無理なので、簡単でとっつきやすいものから試してみたいと思います。
Returnメソッド
渡した値をIQueryable
Observable.Return(1).Subscribe( i => Console.WriteLine(i), () => Console.WriteLine("Completed"));
実行結果
1 Completed
Rangeメソッド
Enumerableとまったく同じです。第一引数に指定した値から1ずつ増やした値を第二引数で指定した数だけ返してくれます。
Observable.Range(10, 3).Subscribe( i => Console.WriteLine(i), () => Console.WriteLine("Completed"));
実行結果
10 11 12 Completed
Repeatメソッド
第一引数で指定した値を第二引数で指定した回数だけ返してくれます。
Observable.Repeat(10, 3).Subscribe( i => Console.WriteLine(i), () => Console.WriteLine("Completed"));
実行結果
10 10 10 Completed
Startメソッド
引数でわたしたデリゲートが返した値を返します。
Observable.Start(() => { Thread.Sleep(3000); return 10; }).Subscribe( i => Console.WriteLine(i), () => Console.WriteLine("Completed")); Console.ReadKey();
実行結果
10 <-実際は10と表示されるまで3秒かかります Completed
Generateメソッド
ソース、継続する間の条件、イテレーション、セレクターを設定します。下記の例だと、初期値0 値が10より小さい間繰り返して 値は1ずつ増やして 値を2乗したものを返すといった感じになります。
Observable.Generate(0, i => i < 10, i => i + 1, i => i * i).Subscribe( i => Console.WriteLine(i), () => Console.WriteLine("Completed"));
実行結果
0 1 4 9 16 25 36 49 64 81 Completed
Throwメソッド
例外を投げます。Subscribeで3つのデリゲートを受け取るオーバーライドだと例外時の処理を書いたり出来ます。
Observable.Throw<int>(new Exception("例外")) .Subscribe( i => Console.WriteLine(i), ex => Console.WriteLine(ex.Message), () => Console.WriteLine("Completed"));
実行結果
例外