2017-01-10 1 views
2

나는 GroupByUntil을 사용하여 훌륭하게 작동하는 특정 속성 값을 가진 MSMQ의 메시지를 그룹화합니다. 이 코드를 사용하고 있습니다.RX GroupByUntil sliding with Until

observable.GroupByUntil(
    message => message.Source, 
    message => message.Body, 
    message => Observable.Timer(new TimeSpan(0,0,5)) //I thought this was sliding expiration 
).Subscribe(HandleGroup); 

내가 잘못 기간이 그룹을 종료하기 전에 새로운 메시지를 전달하는 본질적으로 기다리고, 새 메시지가 주어진 그룹의 도착 때마다, 해당 그룹의 durationSelector 다시 시작한다고 생각했다. 나는 그것이 사실이 아니라는 것을 깨달았고, durationSelector는 무엇을 상관없이 계속 카운트 다운 할 것입니다. 그룹화 될 때 각 그룹에 대해 slidingSelector를 구현하는 가장 좋은 방법은 무엇입니까?

답변

1

Switch은 (는) 친구입니다.

observable.GroupByUntil(
    message => message.Source, 
    message => message.Body, 
    group => group 
     .Select(message => Observable.Timer(new TimeSpan(0, 0, 5))) 
     .Switch() 
).Subscribe(HandleGroup); 

설명 : 각 메시지에 대해

  • , 다른 메시지는 같은 그룹 내에서 함께 오는 경우 오초 후에 한 번
  • 을 발생시키는 타이머를 만들고, 기존의 타이머를 삭제하고, 전환 새로운.
+0

"Observables를 방출하는 Observable을 가장 최근에 방출 된 Observables에 의해 방출 된 항목을 방출하는 단일 Observable로 전환"hahahah, what!? 그걸 결코 해독하지 않았 겠지? – sonicblis

+0

관찰 가능한 연산자에 대한 텍스트 설명은 일반적으로 부족합니다. 대리석 다이어그램은 훨씬 더 가치가 있습니다. – Shlomo