可观察:在源完成之前按时间间隔获取最新值

Observable: Getting latest value in intervals until source finishes(可观察:在源完成之前按时间间隔获取最新值)
本文介绍了可观察:在源完成之前按时间间隔获取最新值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在寻找签名类似于以下内容的可观察选择符:

static IObservable<T> TakeLatest(this IObservable<T> input, TimeSpan interval)

哪一项应该:

  1. 一旦输入发出第一个项目,就立即发出第一个项目
  2. 从那时起,以固定的时间间隔发出输入产生的最新项
  3. 每当输入完成(或失败)时完成(或失败)

以大理石为单位,如下所示-假设间隔=2个时间单位:

时间 %1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
输入 A B C D E F(完成)
输出 A B D D E E 完成(F不再发出)

是否有任何开箱即用的方法或相当简单的选择器来生成这些结果?

推荐答案

这可能完全符合您的要求。不过,我还没有测试过。

/// <summary>Samples the source observable sequence at each interval,
/// allowing repeated emissions of the same element.</summary>
public static IObservable<T> SampleWithDuplicates<T>(this IObservable<T> source,
    TimeSpan interval, IScheduler scheduler = null)
{
    scheduler ??= DefaultScheduler.Instance;
    return source.Publish(published => Observable
        .Interval(interval, scheduler)
        .WithLatestFrom(published, (_, x) => x)
        .Merge(published.FirstAsync())
        .TakeUntil(published.LastOrDefaultAsync()));
}

这篇关于可观察:在源完成之前按时间间隔获取最新值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)