Skip to content

Timestamp

1. 概要

Timestamp は、ソースシーケンスの各要素に現在のタイムスタンプ(ticks)を付加するオペレーターです。TimeProvider.GetTimestamp() から取得した ticks 値と元の値のタプル (long Ticks, T Value) を発行します。

各値の到着時刻を記録したい場合(ログ出力やパフォーマンス計測など)に使用します。

2. シグネチャ

デフォルト TimeProvider によるタイムスタンプ付加

csharp
public static Observable<ValueTuple<long, T>> Timestamp<T>(
    this Observable<T> source)

デフォルトの TimeProvider を使用して、各要素にタイムスタンプを付加します。

csharp
source.Timestamp()

TimeProvider 指定によるタイムスタンプ付加

csharp
public static Observable<ValueTuple<long, T>> Timestamp<T>(
    this Observable<T> source,
    TimeProvider timeProvider)

指定した TimeProvider を使用してタイムスタンプを取得します。テスト時に FakeTimeProvider を使用可能です。

csharp
source.Timestamp(fakeTimeProvider)

overload の使い分け

overload使う場面
引数なし通常のタイムスタンプ付加
TimeProviderユニットテストで時間を制御したい場合

3. マーブルダイアグラム

Timestamp のマーブルダイアグラム

各要素に到着時点のタイムスタンプ(ticks)が付加されます。元の値はタプルの第 2 要素としてそのまま保持されます。

4. サンプルコード

csharp
using R3;

// 各値にタイムスタンプを付けてログ出力
source
    .Timestamp()
    .Subscribe(item =>
    {
        var (ticks, value) = item;
        Console.WriteLine($"[{ticks}] 値: {value}");
    });

// TimeProvider を指定して使用
source
    .Timestamp(TimeProvider.System)
    .Subscribe(item =>
    {
        var (ticks, value) = item;
        Console.WriteLine($"[{ticks}] 値: {value}");
    });

5. 補足

TimeInterval との違い

オペレーター付加する値
Timestamp各値の到着時刻(ticks)(long, T)
TimeInterval前回の値からの経過時間(TimeSpan, T)

Timestamp は絶対的な時刻情報を付加するのに対し、TimeInterval は相対的な経過時間を付加します。用途に応じて使い分けてください。

フレームベースの類似オペレーターとして FrameCount があります。