如何节制一个无限的可观察对象以保持处理中的项目数量恒定?

时间:2019-03-07 21:40:02

标签: c# reactive-programming system.reactive

我从一个可枚举的定期采样中生成了一个无限的可观测值:

    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有点生锈,因此,如果您发现我的示例有任何问题,请纠正我。

0 个答案:

没有答案