假設我有一些IEnumerator<T>
在MoveNext()
方法中做了相當數量的處理。一個枚舉器包裝提前預先緩衝了底層枚舉數的一些項目
從該枚舉器消耗的代碼不僅消耗的速度與數據可用速度一樣快,而且偶爾會等待(具體細節與我的問題無關),以便同步它需要恢復消耗的時間。但是當它下一次呼叫MoveNext()
時,它需要儘可能快的數據。
一種方法是將整個流預先用於某些列表或數組結構中以進行即時枚舉。然而,這會浪費內存,因爲在任何時間點,只有一個項目正在使用,並且在整個數據不適合內存的情況下,這將是禁止的。
所以是有什麼在.NET泛型一個包裝了枚舉/枚舉的方式,它異步預迭代底層的枚舉幾個項目提前並緩存結果所以它總是有一些其緩衝區中可用的項目和調用的MoveNext將永不需要等待?很明顯,消耗的內容,即由調用者後續的MoveNext迭代的內容將從緩衝區中移除。
N.B.我想要做的一部分也叫背壓,並且在Rx世界中,已經在RxJava中實施並正在討論中Rx.NET。 Rx(可觀察到推送數據)可以被認爲是統計員(統計員允許提取數據)的相反方法。我的回答顯示:背壓在拉動方式上相對容易,只需暫停消耗。推動時更難,需要額外的反饋機制。
這看起來像您之前提出的問題的副本,您稱之爲編輯:http:// stackoverflow。com/questions/30700154/a-pre-buffering-enumerator –
@Asad我刪除了舊問題並創建了這個問題,因爲對現有問題的評論與目前的問題完全不匹配。我希望這個更清楚我真正想要的。 –
這個問題似乎沒有明顯改變。當用戶耗盡緩衝區時,您仍然存在預緩衝一些項目的問題,只會導致延遲時間縮短一半,這是調用MoveNext時的一半。 –