1

最初のイベントが到着すると、何らかの作業が発生することを望みます。あとは少し仕事を減らしたいと思います。今まで私は次のコードを持ってきました:

var events = Observable.FromEventPattern<...>(...);

var throttled = events.Throttle(TimeSpan.FromSeconds(1));
events.Take(1).Subscribe((x) =>
{
    DoWork(x);
    throttled.Subscribe((y) => DoWork(y);
});

よりエレガントな表現方法はありますか?

4

2 に答える 2

2

どうやらそれは非常に簡単です:

var events = Observable.FromEventPattern<...>(...);

var throttled = events.Throttle(TimeSpan.FromSeconds(1));
events.Take(1).Concat(throttled).Subscribe((x) => DoWork(x));

Concat最初のシーケンスが終了するのを待ってから、サブスクリプションを 2 番目に移動します。

于 2012-12-26T15:06:25.993 に答える
0

別の一般的な方法は、select-many を使用することです。これにより、1 番目のシーケンスから 2 番目のシーケンスにデータを渡すことができます。また、2 つのシーケンスを異なるタイプにすることもできます。

クエリ内包構文;

var q = from x in xs
        from y in ys
        select new {x, y};

- または - 標準の linq 演算子を拡張メソッドとして使用できます (ただし、x 値へのアクセスは失われます)

xs.SelectMany(x=>ys)
  .Select(y=>y)
于 2013-01-03T09:44:43.970 に答える