我从一个可枚举的定期采样中生成了一个无限的可观测值:
private static IObservable<Runjob> GetRunjobObservable(IEnumerable<Runjob> runjobs)
{
var observable = Observable.Create<Runjob>(obs =>
{
var timer = new System.Timers.Timer();
timer.Interval = _interval;
timer.Elapsed += (s, e) => obs.OnNext(runjobs.Sample(1, true).Single());
return timer;
});
return observable;
}
我想让此运行作业流在不同的线程上进行处理,但要在任何给定时间处理不超过10个运行作业。处理可观察对象中的每个运行作业并不重要-我的目的是使一堆进程同时并持续运行以进行压力测试。
我有以下代码。如何修改它,以便在任何给定时间最多可以处理10个作业?
var runjobObs = GetRunjobObservable(runjobs);
var replies = runjobObs
.SubscribeOn(new EventLoopScheduler(t => new Thread(t) {Name = _threadCounter++.ToString(), IsBackground = true}))
.ObserveOn(Dispatcher.CurrentDispatcher)
.Select(HandleRunjob);
我的Rx有点生锈,因此,如果您发现我的示例有任何问题,请纠正我。