动态计时器可观察

时间:2017-09-27 10:28:14

标签: c# system.reactive

我面临一个与如何创建动态“计时器”可观察相关的问题。

我的意思是,我需要执行一个函数并根据它返回的值(表示秒数的整数)在经过这些秒后需要调用相同的函数。所以,我想我需要根据另一个新值秒重新安排observable。

我试图找到一些可以找到的东西,但是我还没弄清楚我需要做些什么。

有什么想法吗?

1 个答案:

答案 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个值之后停止。