C# 如何创建IObservable<;T>;每n秒返回一个值,不跳过任何

C# 如何创建IObservable<;T>;每n秒返回一个值,不跳过任何,c#,system.reactive,C#,System.reactive,下面的示例是我尝试这样做的: var source = Observable.Sample( Observable.Range(1, int.MaxValue), TimeSpan.FromSeconds(2)); 但是,当I.Subscribe()将该可观察对象输出到控制台时,它会显示如下顺序,每2秒输出一行: OnNext: 312969 OnNext: 584486 OnNext: 862009 显然,.Range()可观察对象正在运行,而.Sample()

下面的示例是我尝试这样做的:

var source
    = Observable.Sample(
          Observable.Range(1, int.MaxValue), TimeSpan.FromSeconds(2));
但是,当I.Subscribe()将该可观察对象输出到控制台时,它会显示如下顺序,每2秒输出一行:

OnNext: 312969
OnNext: 584486
OnNext: 862009
显然,.Range()可观察对象正在运行,而.Sample()可观察对象在每次输出之间等待2秒。我想知道如何创建一个可观察的,但不允许跳过值,所以很明显,它看起来是这样的:

OnNext: 1
OnNext: 2
OnNext: 3

每2秒从.Range()输出一个值。如何在.NET的被动扩展中实现这一点?

我最近通过创建一个。然后,您可以使用Zip方法将您的Observable中的事件与计时器Observable中的事件同步

例如:

    var timer = 
        Observable
            .Timer(
                TimeSpan.FromSeconds(0), 
                TimeSpan.FromSeconds(2)
            );
    var source = Observable.Range(1, int.MaxValue);
    var timedSource = source.Zip(timer,(s,t)=>s);
    timedSource.Subscribe(Console.WriteLine);

使用Observable.GenerateWithTime:

var source = Observable.GenerateWithTime(1, _ => true, x => ++x, x => x, x => TimeSpan.FromSeconds(2));
可观察。范围使用可观察。生成,所以这是一种方法。还有很多其他的方法


对于更高级的内容,例如以相同的方式处理事件(因为这显然只有在您自己生成数据时才有帮助),请查看哪个解决了此问题,并且已经解决了。

效果很好,谢谢。我把它包装成我自己的扩展方法,叫做Pace(..)谢谢,这也是一个有趣的方法。