c# - 在 Reactive Extensions 中如何将项目缓冲到组中?

标签 c# linq system.reactive observer-pattern observable

我有一个 IObservable;其中属性更改具有实体 ID 和 PropertyName。我想用它来更新数据库,但如果多个属性几乎同时发生变化,我只想对同一实体的所有属性进行一次更新。

如果这是一个静态的 IEnumerable 而我使用的是 LINQ,我可以简单地使用:

MyList.GroupBy(C=>C.EntityID);

但是,列表永远不会终止(永远不会调用 IObserver.OnComplete)。我希望能够做的是等待一段时间,比如 1 秒,将所有调用适本地分组在那一秒内。

理想情况下,我会为每个 EntityID 设置单独的计数器,只要发现该 EntityID 的新属性更改,它们就会重置。

我不能使用 Throttle 之类的东西,因为我想处理所有的属性更改,我只想一次性处理它们。

最佳答案

给你:

MyObservable
    .Buffer(TimeSpan.FromSeconds(1.0))
    .Select(MyList =>
        MyList.GroupBy(C=>C.EntityID));

关于c# - 在 Reactive Extensions 中如何将项目缓冲到组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6963547/

相关文章:

c# - 确保我们只订阅一次事件

c# - 如何在不加载表的所有数据的情况下计算事件和非事件统计信息?

c# - 如何在特定时间启动 IObservable?

c# - 测试取消一个简单的可观察对象不会调用 onError

c# - 验证正则表达式而不捕获异常?

javascript - Google map 在 .html 页面中工作正常,但在 ASP.NET 页面中不行

c# - 使用 C# 和反射对类的属性进行单元测试

c# - 将 ComboBox 的 SelectedItem 属性与 Linq 匿名类型一起使用

c# - 以 LINQ 方式返回最大数量的项目

.net - Rx IObservable : How to make a concrete push collection?