internal void InitializeInternal()
        {
            if (Status != WorkerServiceStatus.NotInitialized)
            {
                return;
            }

            if (_context == null)
            {
                _context = CreateWorkerContext();
            }

            if (Status == WorkerServiceStatus.NotInitialized)
            {
                try
                {
                    _instance.Initialize(_context);
                    Status = WorkerServiceStatus.Sleeping;
                }
                catch (Exception ex)
                {
                    _context.Logger.LogException("Error on initialize service", ex, Priority.High);
                    _errors.Add(ex);
                    Status = WorkerServiceStatus.Faulted;
                    return;
                }
            }
        }
 public void Stop()
 {
     if (this.Status == WorkerServiceStatus.Faulted)
         return;
     if (this.Status == WorkerServiceStatus.Running)
         this.Status = WorkerServiceStatus.Stopping;
     else
         this.Status = WorkerServiceStatus.Stopped;
 }
        internal void ExecuteInternal()
        {
            if (Status == WorkerServiceStatus.Stopped ||
                Status == WorkerServiceStatus.Stopping ||
                Status == WorkerServiceStatus.Running ||
                Status == WorkerServiceStatus.Faulted)
            {
                return;
            }

            if (Status == WorkerServiceStatus.Sleeping)
            {
                BackgroundThreadPool.Enqueue(() =>
                {
                    try
                    {
                        Status = WorkerServiceStatus.Running;
                        _instance.Execute(_context);
                        if (Status == WorkerServiceStatus.Running)
                        {
                            Status = WorkerServiceStatus.Sleeping;
                        }
                        else if (Status == WorkerServiceStatus.Stopping)
                        {
                            Status = WorkerServiceStatus.Stopped;
                        }
                    }
                    catch (Exception ex)
                    {
                        _context.Logger.LogException("Error on execute service", ex, Priority.High);
                        _errors.Add(ex);
                        Status = WorkerServiceStatus.Faulted;
                    }
                });
            }
        }
        internal void ExecuteInternal()
        {
            if (Status == WorkerServiceStatus.Stopped
                || Status == WorkerServiceStatus.Stopping
                || Status == WorkerServiceStatus.Running
                || Status == WorkerServiceStatus.Faulted)
                return;

            if (Status == WorkerServiceStatus.Sleeping)
            {
                BackgroundThreadPool.Enqueue(() =>
                {
                    try
                    {
                        Status = WorkerServiceStatus.Running;
                        _instance.Execute(_context);
                        if (Status == WorkerServiceStatus.Running)
                            Status = WorkerServiceStatus.Sleeping;
                        else if (Status == WorkerServiceStatus.Stopping)
                            Status = WorkerServiceStatus.Stopped;
                    }
                    catch (Exception ex)
                    {
                        _context.Logger.LogException("Error on execute service", ex, Priority.High);
                        _errors.Add(ex);
                        Status = WorkerServiceStatus.Faulted;
                    }
                });
            }
        }
        internal void InitializeInternal()
        {
            if (Status != WorkerServiceStatus.NotInitialized)
                return;

            if (_context == null)
                _context = CreateWorkerContext();

            if (Status == WorkerServiceStatus.NotInitialized)
            {
                try
                {
                    _instance.Initialize(_context);
                    Status = WorkerServiceStatus.Sleeping;
                }
                catch (Exception ex)
                {
                    _context.Logger.LogException("Error on initialize service", ex, Priority.High);
                    _errors.Add(ex);
                    Status = WorkerServiceStatus.Faulted;
                    return;
                }
            }
        }