private void ProcessLoop() { WorkerServiceController controller = null; while (true) { _processEvent.WaitOne(); while (_processQueue.Count > 0) { lock (__lockObject) { if (_processQueue.Count == 0) { break; } controller = _processQueue[0]; _processQueue.RemoveAt(0); } switch (controller.Status) { case WorkerServiceStatus.NotInitialized: controller.InitializeInternal(); _processQueue.AddIfNotExists(controller); break; case WorkerServiceStatus.Sleeping: controller.ExecuteInternal(); break; } } } }
internal void ScheduleProcess(WorkerServiceController workerServiceController) { lock (__lockObject) { _processQueue.AddIfNotExists(workerServiceController); } _processEvent.Set(); }
public IWorkerServiceController RegisterService(string serviceName, IWorkerService instance, IWorkerServiceRecoveryPolicy defaultRecoveryPolicy) { Assert.EmptyString(serviceName, "serviceName"); Assert.NullArgument(instance, "instance"); lock (__lockObject) { if (GetService(serviceName, false) != null) throw new InvalidOperationException("Já existe um worker service registrado com este nome: " + serviceName); var controller = new WorkerServiceController(this, serviceName, instance, defaultRecoveryPolicy ?? new DefaultWorkerRecoveryPolicy()); _services[controller.ServiceName] = controller; ScheduleProcess(controller); } return _services[serviceName]; }
public IWorkerServiceController RegisterService(string serviceName, IWorkerService instance, IWorkerServiceRecoveryPolicy defaultRecoveryPolicy) { Assert.EmptyString(serviceName, "serviceName"); Assert.NullArgument(instance, "instance"); lock (__lockObject) { if (GetService(serviceName, false) != null) { throw new InvalidOperationException("Já existe um worker service registrado com este nome: " + serviceName); } var controller = new WorkerServiceController(this, serviceName, instance, defaultRecoveryPolicy ?? new DefaultWorkerRecoveryPolicy()); _services[controller.ServiceName] = controller; ScheduleProcess(controller); } return(_services[serviceName]); }