我希望第一个事件到来会导致一些工作。后来我想减少工作量。到现在为止,我带来了以下代码:
var events = Observable.FromEventPattern<...>(...);
var throttled = events.Throttle(TimeSpan.FromSeconds(1));
events.Take(1).Subscribe((x) =>
{
DoWork(x);
throttled.Subscribe((y) => DoWork(y);
});
有更优雅的表达方式吗?
答案 0 :(得分:2)
显然很简单:
var events = Observable.FromEventPattern<...>(...);
var throttled = events.Throttle(TimeSpan.FromSeconds(1));
events.Take(1).Concat(throttled).Subscribe((x) => DoWork(x));
Concat
将等待第一个序列完成,然后将订阅移至第二个序列。
答案 1 :(得分:0)
另一种常见的方法是使用select-many。这允许您将数据从第一个序列传递到第二个序列,它还允许两个序列具有不同的类型:
在查询理解语法中;
var q = from x in xs
from y in ys
select new {x, y};
- 或者 - 您可以使用标准的linq运算符作为扩展方法(但是不能访问x值)
xs.SelectMany(x=>ys)
.Select(y=>y)