2012-01-13 32 views
7

所有物品是否有使用Throttle行爲(復位加入項目時計時器的方式,但有它返回所有時間內添加的項目的集合?無油門返回添加在給定一個<code>IObservable<T></code>時間跨度

Buffer提供了類似的功能,但它塊中的數據成IList<T>每個時間跨度或計數,但我需要時間來每次添加一個項目的時間重置。

我在這裏看到了類似的問題, Does reactive extensions support rolling buffers?,但答案似乎並不理想,而且有點舊,所以我想知道Rx-Main的發佈版本是否支持這個功能在箱子外面。

+0

這聽起來像在http://stackoverflow.com/a/7604825/259769我'BufferWithInactivity'的回答是你問什麼。你能澄清你的問題嗎? – Enigmativity 2012-01-13 14:14:26

+0

@Enigmativity它是,這正是我所追求的功能。我在我的問題中引用了這個問題:)但我不喜歡那個答案,答覆者已經明確表示它正在進行中。 – RichK 2012-01-13 14:25:24

+0

不確定你在問什麼。如果計時器在每次「添加」(傳播?)時都被重置,那麼首先會有什麼緩衝? – Asti 2012-01-15 21:55:37

回答

7

因爲我answered in the other post,是的,你可以!使用ObservableThrottleWindow方法:

public static IObservable<IList<T>> BufferUntilInactive<T>(this IObservable<T> stream, TimeSpan delay) 
{ 
    var closes = stream.Throttle(delay); 
    return stream.Window(() => closes).SelectMany(window => window.ToList()); 
} 
+0

好的答案!但是不應該使用'return stream.Publish(hot => ...')發佈流,以避免對冷觀察對象進行兩次訂閱? – Ziriax 2017-02-15 20:57:04

相關問題