具有间隔的IEnumerable To Observable

时间:2016-02-06 22:53:54

标签: c# system.reactive

生成"措施"我每隔5秒就会做一次:

var Events = Observable.
    Interval(TimeSpan.FromSeconds(5)).
    Select(i => factory.GenerateRandomMeasure())

我想做同样的事情但基于现有的Measure系列。 我想我必须做一些事情:

var Events = existingList.ToObservable();

但是是否可以添加间隔概念以获得具有间隔的每个列表项? (例如,每5秒一项)

1 个答案:

答案 0 :(得分:4)

您可以执行其中任何一项正常工作:

(1)

var Events =
    Observable
        .Interval(TimeSpan.FromSeconds(5))
        .Zip(existingList, (i, x) => x)
        .Select(i => factory.GenerateRandomMeasure());

(2)

var Events2 =
    Observable
        .Generate(
            0,
            x => x < existingList.Count,
            x => x + 1,
            x => existingList[x],
            x => TimeSpan.FromSeconds(5))
        .Select(i => factory.GenerateRandomMeasure());          

第一个可能更明智,更容易编写。第二个非常值得学习,如果你不知道它,因为.Generate非常强大并且可以在很多地方使用。