예제 #1
0
        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;
                    }
                }
            }
        }
예제 #2
0
 internal void ScheduleProcess(WorkerServiceController workerServiceController)
 {
     lock (__lockObject)
     {
         _processQueue.AddIfNotExists(workerServiceController);
     }
     _processEvent.Set();
 }
예제 #3
0
 internal void ScheduleProcess(WorkerServiceController workerServiceController)
 {
     lock (__lockObject)
     {
         _processQueue.AddIfNotExists(workerServiceController);
     }
     _processEvent.Set();
 }
예제 #4
0
 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];
 }
예제 #5
0
 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]);
 }