3

そのため、非常に時代遅れのハンズオン ラボ (HoL) はRemoveTimestamp、後のリリースで削除されたメソッドを使用しています。その振る舞いがどうあるべきか完全にはわかりません。HoL から、この拡張メソッドが提供されました。

public static IObservable<T> LogTimestampedValues<T>(this IObservable<T> source, 
    Action<Timestamped<T>> onNext)
{
    return source.Timestamp().Do(onNext).RemoveTimestamp();
}

代替品はありますか、またはこのメソッドの新しい操作/予想される動作を知っている人はいますか? Timestampまだ存在しています。

4

2 に答える 2

3

拡張メソッドを自分で定義し、拡張メソッドを呼び出してインスタンスからプロパティを返すことにより、ラッパーを手動で削除できますTimestampedSelectValueTimestamped

public static IObservable<T> LogTimestampedValues<T>(this IObservable<T> source, 
    Action<Timestamped<T>> onNext)
{
    // Validate parameters.
    if (source == null) throw new ArgumentNullException("source");
    if (onNext == null) throw new ArgumentNullException("onNext");

    // Timestamp, call action, then unwrap.
    return source.Timestamp().Do(onNext).Select(t => t.Value);
}

ただし、本当に効果的であるためには、IScheduler実装を取り、Timestamp拡張メソッドのオーバーロードを呼び出すオーバーロードを定義する必要があります。

public static IObservable<T> LogTimestampedValues<T>(this IObservable<T> source, 
    Action<Timestamped<T>> onNext, IScheduler scheduler)
{
    // Validate parameters.
    if (source == null) throw new ArgumentNullException("source");
    if (onNext == null) throw new ArgumentNullException("onNext");
    if (scheduler == null) throw new ArgumentNullException("scheduler");

    // Timestamp, call action, then unwrap.
    return source.Timestamp(scheduler).Do(onNext).Select(t => t.Value);
}

ロギングで使用する特定のスケジューラーがある場合があるため、これを実行する必要があります。

実装を渡さない場合、最初の拡張メソッドは拡張メソッドISchedulerの薄いラッパーにすぎず、あまり価値がありません。Do

于 2012-12-17T16:04:42.203 に答える
2

多田!

public static IObservable<T> RemoveTimestamp<T>(this IObservable<Timestamped<T>> This)
{
    return This.Select(x => x.Value);
}
于 2012-12-17T20:20:29.807 に答える