@Wilka と同じ名前を使用すると、以下の拡張機能を使用できます。
public static IObservable<TResult> FirstAndLatest<T, TResult>(this IObservable<T> source, Func<T,T,TResult> func)
{
var published = source.Publish().RefCount();
var first = published.Take(1);
return first.CombineLatest(published, func);
}
必ずしも を返すとは限りませんTupleが、結果にセレクター関数を渡すオプションを提供することに注意してください。これにより、基礎となるプライマリ オペレーション ( CombineLatest) との整合性が保たれます。これは明らかに簡単に変更できます。
使用法 (結果のストリームにタプルが必要な場合):
Observable.Interval(TimeSpan.FromSeconds(0.1))
.FirstAndLatest((a,b) => Tuple.Create(a,b))
.Subscribe(Console.WriteLine);