我面临一个与如何创建动态“计时器”可观察相关的问题。
我的意思是,我需要执行一个函数并根据它返回的值(表示秒数的整数)在经过这些秒后需要调用相同的函数。所以,我想我需要根据另一个新值秒重新安排observable。
我试图找到一些可以找到的东西,但是我还没弄清楚我需要做些什么。
有什么想法吗?
答案 0 :(得分:3)
使用Observable.Generate
。试试这个例子:
void Main()
{
Observable
.Generate(
0, // initialState
x => x < 10, //condition
x => x + 1, //iterate
x => x, //resultSelector
x => TimeSpan.FromSeconds(GetSeconds())) //timeSelector
.Timestamp()
.Subscribe(x => Console.WriteLine($"{x.Value} {x.Timestamp}"));
}
private double _seconds = 2.0;
public double GetSeconds()
{
if (++_seconds > 5.0)
{
_seconds = 2.0;
}
return _seconds;
}
它产生以下输出:
0 2017/09/27 12:47:24 +00:00 1 2017/09/27 12:47:28 +00:00 2 2017/09/27 12:47:33 +00:00 3 2017/09/27 12:47:35 +00:00 4 2017/09/27 12:47:38 +00:00 5 2017/09/27 12:47:42 +00:00 6 2017/09/27 12:47:47 +00:00 7 2017/09/27 12:47:49 +00:00 8 2017/09/27 12:47:52 +00:00 9 2017/09/27 12:47:56 +00:00
第一个结果显示在3.0
秒后(因为初始++seconds
)和4.0
秒之后的下一个值,如时间戳的差异所示。
由于x => x < 10, //condition
而在10个值之后停止。