2012-01-13 2 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

+0

@Enigmativity 그것은 정확하게 내가 따라온 기능입니다. 나는 내 질문에 그 질문을 참조 :)하지만 그 대답을 좋아하지 않아, answerer 명시 적으로 그것이 진행중인 일을 명시했다. – RichK

+0

당신이 무엇을 요구하고 있는지 확실하지 않습니다. 항목이 "추가"될 때마다 타이머가 재설정되면 (전파됩니까?) 처음에는 버퍼링 할 것이 무엇입니까? – Asti

답변

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