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); } }
/// <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()); }