c# - IEnumerable 到具有间隔的 Observable

标签 c# system.reactive

为了每 5 秒生成一个“度量”,我正在做类似的事情:

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

我想做同样的事情,但基于现有的 Measure 集合。 我假设我必须做类似的事情:

var Events = existingList.ToObservable();

但是是否可以添加一个间隔概念来让每个列表项都有一个间隔? (例如每 5 秒一个项目)

最佳答案

您可以执行以下任一操作:

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

关于c# - IEnumerable 到具有间隔的 Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35247499/

相关文章:

c# - 什么是工作进程回收......?

c# - 将基于事件的代码转换为 Rx

c# - 从 URI 相对路径中删除 %20

c# - If value in range(x,y) 函数 c#

c# - 软件包需要 NuGet 客户端版本...或更高版本

c# - System.Xml.XPath.XPathException 有一个无效的标记

rx-java - 如何避免 Rx 流中的重复网络调用?

f# - 将多个 observable 合并到一个 observable 数组中

c# - Reactive Extensions 看起来很慢——我做错了什么吗?

c# - 响应式扩展订阅调用等待