这里的解决方案:
eventSource
.GroupBy(e => e.GroupingKey)
.SelectMany(group => group.Buffer(TimeSpan.FromSeconds(60), 100))
.Subscribe(list => SendToStorage(list));
这里有一对夫妇一般规则,可以帮助你 '减少':
1)嵌套订阅通常在嵌套订阅之前嵌入订阅,然后跟着Merge
,然后嵌套订阅。因此应用的是,你会得到这样的:
eventSource
.GroupBy(e => e.GroupingKey)
.Select(group => new { group.Key, Events = group })
.Select(group => group.Events.Buffer(TimeSpan.FromSeconds(60), 100)) //outer subscription selector
.Merge()
.Subscribe(list => SendToStorage(list));
2)可以很明显的将两个连续的选择(既然你不匿名对象做任何事情,只需删除):
eventSource
.GroupBy(e => e.GroupingKey)
.Select(group => group.Buffer(TimeSpan.FromSeconds(60), 100))
.Merge()
.Subscribe(list => SendToStorage(list));
3)最后,Select
后跟一个Merge
可以减少到一个SelectMany
:
eventSource
.GroupBy(e => e.GroupingKey)
.SelectMany(group => group.Buffer(TimeSpan.FromSeconds(60), 100))
.Subscribe(list => SendToStorage(list));
一个优秀的,公呈现答案。 – Enigmativity
写了一些单元测试,以验证它继续工作,并像一个魅力。谢谢! –