反应性扩展 - 将物品从一个集合泵送到另一个集合

时间:2010-12-31 12:20:26

标签: c# .net .net-4.0 system.reactive

我有一个IEnumerable集合,并希望在一秒钟内将项目泵入另一个集合。我该如何实现这一目标?有很多新的扩展方法。我还没有在哪里使用。

2 个答案:

答案 0 :(得分:4)

list1.ToObservable() // Convert list1 to Observable
    .Zip(
        Observable.Interval(TimeSpan.FromSeconds(1)), // Zip it with an observable that ticks every second
        (list, timerList) => list // select list1 only
    ).
Subscribe((item) =>
{
    list2.Add(item); // on each tick, add an item to list2
});

答案 1 :(得分:0)

这是你可以做到的一种方式。我不是说它是最“Rx”的方式,请注意(我对Rx的体验仍然有限)。

public static IEnumerable<T> Delay(this IEnumerable<T> source, int interval)
{
    foreach (T item in source)
    {
        Thread.Sleep(interval);
        yield return item;
    }
}

然后:

var source = firstCollection.Delay(1000).ToObservable();
source.Subscribe(x => secondCollection.Add(x));