Exemple #1
0
        public void ChangeScale(int newScaleSize)
        {
            if (newScaleSize <= 0)
            {
                throw new ArgumentOutOfRangeException("newScaleSize", "Must be Greater than Zero");
            }

            ScaleSize = newScaleSize;

            if (!running)
            {
                return;
            }

            lock (lockWorkers)
            {
                // Scale down
                while (workers.Count > ScaleSize)
                {
                    workers[0].Cancel();
                    workers.RemoveAt(0);
                }

                // Scale up
                while (workers.Count < ScaleSize)
                {
                    var worker = new ServiceWorkerAdapter <TNotification>(this, ServiceConnectionFactory.Create());
                    workers.Add(worker);
                    worker.Start();
                }

                LogAgent.Debug("Scaled Changed to: " + workers.Count);
            }
        }
Exemple #2
0
        /// <summary>
        /// 获取未使用的进程
        /// </summary>
        /// <returns></returns>
        public ServiceWorkerAdapter <TNotification> GetServiceWorkerAdapter()
        {
            ServiceWorkerAdapter <TNotification> serviceWorker = workers.Find(o => o.IsCompleted == true);

            if (serviceWorker != null)
            {
                return(serviceWorker);
            }
            return(workers.FirstOrDefault());
        }