使用 Observable 從資料庫流式傳輸資料
假設有一個方法返回 IEnumerable<T>
,fe
private IEnumerable<T> GetData()
{
try
{
// return results from database
}
catch(Exception exception)
{
throw;
}
}
建立一個 Observable 並非同步啟動一個方法。SelectMany
扁平化集合,並通過 Buffer
每 200 個元素觸發訂閱。
int bufferSize = 200;
Observable
.Start(() => GetData())
.SelectMany(s => s)
.Buffer(bufferSize)
.ObserveOn(SynchronizationContext.Current)
.Subscribe(items =>
{
Console.WriteLine("Loaded {0} elements", items.Count);
// do something on the UI like incrementing a ProgressBar
},
() => Console.WriteLine("Completed loading"));