Rx:用于从 Observable 流中获取第一个和最新值的运算符

2024-05-06

对于基于 Rx 的变更跟踪解决方案,我需要一个运算符,它可以为我提供可观察序列中的第一个和最新的项目。

我将如何编写一个 Rx 运算符来生成以下弹珠图(注意:括号只是用来排列项目......我不知道如何最好地在文本中表示这一点):

     xs:---[a  ]---[b  ]-----[c  ]-----[d  ]---------|
desired:---[a,a]---[a,b]-----[a,c]-----[a,d]---------| 

使用与 @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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rx:用于从 Observable 流中获取第一个和最新值的运算符 的相关文章

随机推荐