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(..)谢谢,这也是一个有趣的方法。