添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
被表白的书签  ·  NPM Sonar Scanner ...·  14 小时前    · 
奋斗的豆浆  ·  Error loading ...·  3 周前    · 
酷酷的煎鸡蛋  ·  [CMake] Dependency ...·  3 周前    · 
宽容的毛衣  ·  “豁车”变“豁命”·  1 年前    · 
  • 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メソッド」
  • Reactive Extensions再入門 その29「値を指定した時間だけ遅延させるDelayメソッド」
  • Reactive Extensions再入門 その30「もう待ちきれない!を表現するTimeoutメソッド」
  • Reactive Extensions再入門 番外編「センサー監視」
  • Reactive Extensions再入門 番外編「System.Reactive.Linq.Observableのメソッド一覧とメモ」
  • 個人的には、単発メソッドの紹介はそろそろおおづめ。今回は デバッグ に便利そうなメソッドについて紹介します。

    時間に関する情報を付与する拡張メソッド

    ここでは、IObservable のシーケンスに対して時間に関する情報を付与するIObservable の拡張メソッドについて説明します。

    Timestampメソッド

    ここでは、Timesptampメソッドについて説明します。Timestampメソッドは、IObservable のシーケンスに対して、その名の通りタイムスタンプを追加するメソッドです。メソッドの シグネチャ を以下に示します。

    public static IObservable<Timestamped<T>> Timestamp<T>(this IObservable<T> source);
    

    戻り値がIObservable >型になっています。このTimestamped 型は以下のように定義されています。( 演算子 のオーバーロード等は省いています)

    using System;
    namespace System.Reactive
        public struct Timestamped<T>
            public DateTimeOffset Timestamp { get; }
            public T Value { get; }
    

    Timestampプロパティで、時間を取得しValueプロパティで値を取得するシンプルな構造体です。コード例を下記に示します。

    var subscriber = Observable
        // 1秒間隔で0〜4の値を発行
        .Generate(0, i => i < 5, i => i + 1, i => i, _ => TimeSpan.FromSeconds(1))
        // タイムスタンプをつける(Timestamped<T>型になる)
        .Timestamp()
        // 購読
        .Subscribe(
            i => Console.WriteLine("Timestamp: {0}, Value: {1}", i.Timestamp, i.Value));
    // 終了待ち
    Console.WriteLine("Please enter key.");
    Console.ReadLine();
    subscriber.Dispose();
    

    1秒間隔で0〜4の値を発行して、それにTimestampメソッドを呼び出してTimestamped 型に変換しています。そしてSubscribeでTimestampとValueを表示しています。実行結果を以下に示します。

    Please enter key.
    Timestamp: 2012/02/05 22:47:59 +09:00, Value: 0
    Timestamp: 2012/02/05 22:48:00 +09:00, Value: 1
    Timestamp: 2012/02/05 22:48:01 +09:00, Value: 2
    Timestamp: 2012/02/05 22:48:02 +09:00, Value: 3
    Timestamp: 2012/02/05 22:48:03 +09:00, Value: 4

    値が発行された時の時間が表示されていることが確認できます。

    TimeIntervalメソッド

    ここでは、TimeIntervalメソッドについて説明します。TimeIntervalメソッドはIObservable のシーケンスから発行された値の間隔をTimeSpan型で追加します。メソッドの シグネチャ を以下に示します。

    public static IObservable<TimeInterval<T>> TimeInterval<T>(this IObservable<T> source);
    

    戻り値が、IObservable >型になっています。TimeInterval 型は以下のように定義されています。( 演算子 のオーバーロード等は省いています)

    using System;
    namespace System.Reactive
        public struct TimeInterval<T>
            public TimeSpan Interval { get; }
            public T Value { get; }
    

    Intervalプロパティで時間間隔を取得し、Valueプロパティで値を取得するシンプルな構造体です。コード例を下記に示します。

    var subscriber = Observable
        // 1秒間隔で0〜4の値を発行
        .Generate(0, i => i < 5, i => i + 1, i => i, _ => TimeSpan.FromSeconds(1))
        // 値の発行間隔をつける(TimeInterval<T>型になる)
        .TimeInterval()
        // 購読
        .Subscribe(
            i => Console.WriteLine("Interval: {0}, Value: {1}", i.Interval, i.Value));
    // 終了待ち
    Console.WriteLine("Please enter key.");
    Console.ReadLine();
    subscriber.Dispose();
    

    1秒間隔で0〜4の値を発行して、それにTimeIntervalメソッドを呼び出してTimeInterval 型に変換しています。そしてSubscribeでIntervalとValueを表示しています。実行結果を以下に示します。

    Please enter key.
    Interval: 00:00:01.0050575, Value: 0
    Interval: 00:00:01.0150581, Value: 1
    Interval: 00:00:01.0140580, Value: 2
    Interval: 00:00:01.0140580, Value: 3
    Interval: 00:00:01.0120578, Value: 4

    値が発行された間隔が表示されていることが確認できます。