2
我想要消耗一个可随时填充的IObservable。从顶部排出IObservable
我有这样的扩展方法:
public static IObservable<TOut> Drain<TSource, TOut>(this IObservable<TSource> source,
Func<TSource, IObservable<TOut>> selector)
{
return Observable.Defer(() =>
{
BehaviorSubject<Unit> queue = new BehaviorSubject<Unit>(new Unit());
return source
.Zip(queue, (v, q) => v)
.SelectMany(v => selector(v)
.Do(_ =>
{
},() =>
{
queue.OnNext(new Unit());
})
);
});
}
我像如下使用:
_moviesToTranslateObservable = new Subject<IMovie>();
_moviesToTranslateObservable.Drain(s => Observable.Return(s).Delay(TimeSpan.FromMilliseconds(250)))
.Subscribe(async movieToTranslate =>
{
}
一旦新项目推:
_moviesToTranslateObservable.OnNext(movieToTranslate);
的的IObservable是消耗。
我的问题是,当我添加很多项目时,我不想消耗第一个已添加的,但最后添加的(如堆栈,而不是队列)。
我该如何做到这一点? BehaviorSubject是否适合堆栈消耗行为?
正是我一直在寻找!非常感谢 – Ben