使用间隔将IEnumerable转换为Observable

3
为了每5秒生成一次“度量”,我正在进行以下操作:
var Events = Observable.
    Interval(TimeSpan.FromSeconds(5)).
    Select(i => factory.GenerateRandomMeasure())

我希望基于现有的度量集合做同样的事情。 我认为我需要做类似以下操作:

var Events = existingList.ToObservable();

但是是否可以添加一个时间间隔的概念,以便每隔一段时间获取列表项?(例如每5秒钟获取一个项目)

1个回答

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非常强大,并且可以在许多地方使用。


我选择第二个解决方案! 它很完美。也许不太清楚,但在这种情况下我不再使用工厂。我的用法是从带有随机度量的工厂或现有列表中获取。但都带有一个间隔。 - bAN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接