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将等待第一个序列完成,然后将订阅移至第二个。

于 2012-12-26T15:06:25.993 回答
0

另一种常见的方法是使用多选。这允许您将数据从第一个序列传递到第二个序列,它还允许两个序列具有不同的类型:

在查询理解语法中;

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 回答