2017-07-19 2 views
1

更新イベントが毎秒150〜200回更新されます。私はこれをキーごとに1秒間にまとめたいと思っています。私はこの更新ごとに1秒を処理したいA1、B1、C1、A2、A3、B2リセット拡張を使用して、イベントの更新でキーが1秒に更新される

例:1秒でIの順に3つのキーA、B、Cの更新を受け取ります&プロセスのみA3、B2 &上記の例のC1。

リアクティブエクステンションを使用してこれを行うにはどうすればよいですか? は、これまで私が試した:

Observable.FromEventPattern<EventArgs>(_listener, "EventHandler", System.Reactive.Concurrency.NewThreadScheduler.Default) 
      .GroupBy(x => x.EventArgs.Key) 
      .Subscribe(g => 
      { 
       g.Sample(TimeSpan.FromSeconds(1)) 
       .Subscribe(x1 => 
       { 
        updateSubject.OnNext(key); 
       }); 
      }); 

は確かに私は期待していないものを。これには適切なアプローチを提案してください。

答えて

1

何が欲しいのはもっとこのようなものです:

Observable 
    .FromEventPattern<EventArgs>(_listener, "EventHandler", System.Reactive.Concurrency.NewThreadScheduler.Default) 
    .GroupBy(x => x.EventArgs.Key) 
    .Select(g => g.Sample(TimeSpan.FromSeconds(1.0))) 
    .Merge() 
    .Subscribe(x => 
    { 
     updateSubject.OnNext(key); 
    }); 

はしかし、それはあなたの.SubscribeupdateSubject.OnNext(key);を持っていることは本当に悪い考えです。実際にコードを表示して、適切に処理する方法をアドバイスする必要があります。

Observable.FromEventPattern<EventArgs>(_listener, "EventHandler", System.Reactive.Concurrency.NewThreadScheduler.Default) 
      .Distinct(x => x.EventArgs.Key) 
      .Sample(TimeSpan.FromSeconds(1)) 
      .Subscribe(x1 => 
      { 
        updateSubject.OnNext(x1.EventArgs.NewValue); 
      }); 

わからない、私はそれを右にやっている場合:

1

しかし、私が試した、私はマージが私のためにそれをしなかったこと

Observable.FromEventPattern<EventArgs>(_listener, "EventHandler", System.Reactive.Concurrency.NewThreadScheduler.Default) 
      .GroupBy(x => x.EventArgs.Key) 
      .Subscribe(g => 
      { 
       g.Sample(TimeSpan.FromSeconds(1)) 
       .Subscribe(x1 => 
       { 
        updateSubject.OnNext(key); 
       }); 
      }); 

updateSubject 
.SubscribeOn(NewThreadScheduler.Default) 
.ObserveOn(NewThreadScheduler.Default) 
.Subscribe(EventHandler); //Event Handler is the what gets called to handle the events 

後にやってるあまりありませんここに。

関連する問題