我想使用一个可以随时填充的 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 是否适合堆栈消耗行为?