過去記事インデックス
- Reactive Extensions再入門 その1
- Reactive Extensions再入門 その2「IObservableインターフェースとIObserverインターフェース」
- Reactive Extensions再入門 その3「IObservableのファクトリメソッド」
- Reactive Extensions再入門 その4「Timer系のファクトリメソッド」
- Reactive Extensions再入門 その5「HotとCold」
- Reactive Extensions再入門 その6「HotなIObservableを作成するファクトリ」
- Reactive Extensions再入門 その7「LINQスタイルの拡張メソッド」
- Reactive Extensions再入門 その8「SkipとTakeメソッド」
- Reactive Extensions再入門 その9「Skip + Take + Repeat = ドラッグ」
- Reactive Extensions再入門 その10「Doメソッド」
- Reactive Extensions再入門 その11「Catchメソッド」
- Reactive Extensions再入門 その12「Finallyメソッドとリソース解放」
- Reactive Extensions再入門 その13「最後の値を取得するLatestとMostRecentメソッド」
- Reactive Extensions再入門 その14「Nextメソッド」
- Reactive Extensions再入門 その15「To*****系メソッド」
- Reactive Extensions再入門 その16「最大、最少、平均を求めるメソッド」
- Reactive Extensions再入門 その17「集計するメソッド」
- Reactive Extensions再入門 その18「CountメソッドとLongCountメソッド」
- Reactive Extensions再入門 その19「AnyメソッドとAllメソッド」
- Reactive Extensions再入門 その20「GroupByメソッドでグルーピングしてみよう」
- Reactive Extensions再入門 その21「GroupByUntilメソッド」
- Reactive Extensions再入門 その22「単一の値を取得するメソッド」
- Reactive Extensions再入門 その23「重複を排除するメソッド」
- Reactive Extensions再入門 その24「単一の値を取得するメソッド その2」
- Reactive Extensions再入門 その25「値をまとめるBufferメソッド」
- Reactive Extensions再入門 その26「値をまとめるWindowメソッド」
- Reactive Extensions再入門 その27「時間でフィルタリング?Sampleメソッド」
- Reactive Extensions再入門 その28「落ち着いたら流すThrottleメソッド」
はじめに
今回は、Delayメソッドです。Reactive Extensionsのデモとして、とても魅せやすいメソッドですね!シンプルなのでさくっといきましょう。
Delayメソッド
ここでは、Delayメソッドについて説明します。Delayメソッドは名前が示す通りIObservable
メソッドのシグネチャを以下に示します。
public static IObservable<T> Delay<T>( this IObservable<T> source, TimeSpan dueTime);
引数のdueTimeで遅延させる時間を指定します。TimeSpan型を受け取る以外にも、特定の時点まで遅延させることも出来ます。このメソッドのコード例を下記に示します。
var source = new Subject<int>(); source // 10秒遅延させる .Delay(TimeSpan.FromSeconds(10)) // 値を時間つきで表示させる .Subscribe(i => Console.WriteLine("{0:HH:mm:ss.fff} {1}", DateTime.Now, i)); // 1秒間隔で1〜5の値を発行 foreach (var i in Enumerable.Range(1, 5)) { Console.WriteLine("{0:HH:mm:ss.fff} OnNext({1})", DateTime.Now, i); source.OnNext(i); Thread.Sleep(1000); } // 終了待ち Console.WriteLine("Please enter key"); Console.ReadLine();
Delayメソッドを使ってIObservable
21:58:12.174 OnNext(1) 21:58:13.202 OnNext(2) 21:58:14.202 OnNext(3) 21:58:15.202 OnNext(4) 21:58:16.202 OnNext(5) Please enter key 21:58:22.214 1 21:58:23.205 2 21:58:24.202 3 21:58:25.216 4 21:58:26.215 5
実行結果からわかるように、OnNextで発行した値が10秒後に表示されています。このようにDelayメソッドを使うと、値を遅延させて後続に流すということが実現できます。