2011-08-05 3 views
3

나는 IObservable을 가지고있다; 여기서 속성 변경에는 엔터티 ID와 PropertyName이 있습니다. 이 방법을 사용하여 데이터베이스를 업데이트하려고하지만 여러 속성이 거의 동시에 변경되는 경우 동일한 엔터티의 모든 속성에 대해 하나의 업데이트 만 수행하려고합니다. 이 정적는 IEnumerable이었고, 나는 간단하게 사용할 수있는 LINQ를 사용하는 경우Reactive Extensions에서 항목을 그룹으로 버퍼링하는 방법은 무엇입니까?

:

MyList.GroupBy(C=>C.EntityID); 

그러나 목록이 종료되지 않습니다 (IObserver.OnComplete 호출되지 않습니다). 내가 할 수 있기를 원하는 것은 1 초의 시간을 기다려서 1 초 동안 모든 호출을 적절하게 그룹화하는 것입니다.

이상적으로 나는 각 EntityID에 대해 별도의 카운터를 가지며 해당 EntityID에 대한 새 속성 변경이 발견 될 때마다 다시 설정됩니다.

나는 모든 속성 변경을 처리하기 위해 Throttle과 같은 것을 사용할 수 없으며 한 번에 함께 처리하려고합니다.

+0

제목과 질문의 텍스트는 전혀 관계가없는 것 같다. 고칠 수 있니? – svick

+0

고정되었지만, GroupByUntil의 기능과 작동 방식을 알고 싶었지만, 원하는대로 할 수도 있지만 실제로는 다른 입력으로 테스트를 시도했을 때 실제로 아무 것도하지 않는 것 같았습니다. – ForbesLindesay

답변

7

당신은 이동 :

MyObservable 
    .Buffer(TimeSpan.FromSeconds(1.0)) 
    .Select(MyList => 
     MyList.GroupBy(C=>C.EntityID)); 
2

Buffer 메서드는 원하는대로하는 것처럼 보입니다. TimeSpan을 지정하면 모든 메시지가 목록으로 축소됩니다. 비슷한 것을하는 Window 메서드가 있지만, 그 의미가 무엇인지 모를 정도입니다. 여기

+0

이 경우 Window는 Buffer보다 복잡합니다. 원하는 것은 시간대에 변경된 것의 목록이므로 –

+0

감사합니다. 링크 +1 – ForbesLindesay

관련 문제