我想填写一个集合,直到满足这两个条件中的任何一个:
如果满足任何这些条件,我应该执行我订阅的方法(在本例中为Console.WriteLine)
static void Main(string[] args)
{
var sourceCollection = Source().ToObservable();
var bufferedCollection = sourceCollection.Buffer(
() => Observable.Amb(
Observable.Timer(TimeSpan.FromSeconds(5)//,
//Observable.TakeWhile(bufferedCollection, a=> a.Count < 5)
))
);
bufferedCollection.Subscribe(col =>
{
Console.WriteLine("count of items is now {0}", col.Count);
});
Console.ReadLine();
}
static IEnumerable<int> Source()
{
var random = new Random();
var lst = new List<int> { 1,2,3,4,5 };
while(true)
{
yield return lst[random.Next(lst.Count)];
Thread.Sleep(random.Next(0, 1500));
}
}
我设法使其与Observable.Timer一起工作,但TakeWhile不起作用,我如何检查收集计数,TakeWhile是否适用于此或是否有其他方法?我确定它简单。
答案 0 :(得分:0)
我知道了,答案是在Buffer的文档中 - 有一个重载,它带有一个指定最大计数的参数。所以我不需要Observable.Amb
,我可以说
var sourceCollection = Source().ToObservable();
var maxBufferCount = 5;
var bufferedCollection = sourceCollection.Buffer(TimeSpan.FromSeconds(5), maxBufferCount, Scheduler.Default);
bufferedCollection.Subscribe(col =>
{
Console.WriteLine("count of items is now {0}", col.Count);
});
Console.ReadLine();