1

私は、リアクティブ拡張を使用して次のシナリオを実装する方法を理解しようとしています。私が検討している他の解決策には、一連のタイマーの管理が含まれます...可能であれば避けたいと考えています。

シナリオ
「ActionRequests」のストリームが発生しています。ActionRequestのストリーミングは、さまざまなオブジェクトソースからのものです。特定のソースからのリクエストがx秒間停止した場合にのみ、最新のActionRequestを取得することに関心があります。

だからそれを分解します。

  • イベントは、さまざまなオブジェクトソースから継続的に受信されています。
  • さまざまなオブジェクトソースはGUIDで示されます-ActionRequestsクラスを参照してください
  • オブジェクトソースからのx秒の無音の後、最新のイベントがプッシュされます。
  • 関心のある最新のActionRequestを受信すると、古いメッセージを破棄できます。

    public class ActionRequest
    {
        public ActionRequest(Guid quoteId, DateTime now)
        {
            QuoteId = quoteId;
            RequestTimestamp = now;
        }
    
        public Guid QuoteId { get; set; }
        public DateTime RequestTimestamp { get; set; }
    
    }
    

    これについての考えをいただければ幸いです。

  • 4

    1 に答える 1

    1

    回答は、 RichardHeinによってRXフォーラムで提供されました。

    答えの短いバージョンは以下の通りです。より完全なサンプルがRXフォーラムのスレッドに追加されました。

    var throttled = observable.GroupBy(tar => tar.Value.QuoteId).SelectMany(g => g.Throttle(TimeSpan.FromMilliseconds(1500)));
    
    于 2010-08-17T11:07:44.283 に答える