這裏的解決方案:
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
寫了一些單元測試,以驗證它繼續工作,並像一個魅力。謝謝! –