我對Rx相當新,並且無法找到解決方案來解決我的問題。我正在使用Rx通過客戶端庫開始下載。目前,它看起來像:緩衝訂閱的無功擴展
private void DownloadStuff(string descriptor, Action<Stuff> stuffAction)
{
this.stuffDownloader.GetStuffObservable(descriptor).Subscribe(x => stuffAction(x))
}
where stuffDownloader是在客戶端庫中定義的下載邏輯的包裝。但是我遇到了一個問題,那就是我太多地調用了DownloadStuff,導致很多下載,並且壓倒了系統。現在我想要做的是
private void DownloadStuff(string descriptor, Action<Stuff> stuffAction)
{
this.stuffDownloader.GetStuffObservable(descriptor)
.SlowSubscribe(TimeSpan.FromMilliSeconds(50))
.Subscribe(x => stuffAction(x))
}
其中,SlowSubscribe是Rx操作的一些組合,僅在某個時間間隔訂閱。
通常我會將這些DownloadStuff調用放在一個隊列中並在一段時間內關閉它們,但最近我一直試圖通過Rx做更多的事情。我發現了三種解決方案:
- 此功能存在,並且可以在訂閱端完成。
- 這是可能的,但下載器的基礎設施是不正確的,應該改變(即stuffDownloader需要有不同的行爲)
- 這不應該與Rx,做另一種方式。
發生在我身上#2可能通過將IObservable的描述符傳遞給客戶端庫,並以某種方式減慢描述符進入Observable的方式。
你真正的問題是什麼? – 2013-05-22 19:05:59