internal bool ShouldCancelAction(EngineStatusEnum engineStatus)
        {
            var arg = new BeforeEngineStatusChangedEventArgs(engineStatus);

            OnBeforeEngineChanged?.Invoke(this, arg);
            return(arg.Cancel);
        }
示例#2
0
        /// <summary>
        /// Initiates the dequeuing of tasks from the queue
        /// </summary>
        public void Start()
        {
            _engineStatus = EngineStatusEnum.Running;
            while (_engineStatus != EngineStatusEnum.Stopped)
            {
                while (_engineStatus == EngineStatusEnum.Running)
                {
                    while (_tasksInProcess < _maxTaskHandlers)
                    {
                        TaskDataStructure?task = DequeueTask();
                        if (task.HasValue)
                        {
                            ProcessTask(task.Value);
                        }
                    }
                    Thread.Sleep(1000);
                }

                if (_engineStatus == EngineStatusEnum.Paused)
                {
                    WaitHandle[] waithandles = new WaitHandle[3];
                    waithandles[0] = _stopEvent;
                    waithandles[1] = _resumeEvent;
                    int waitResult = WaitHandle.WaitAny(waithandles);
                    if (waitResult == 0)
                    {
                        _stopEvent.Reset();
                    }
                    if (waitResult == 1)
                    {
                        _resumeEvent.Reset();
                    }
                }
            }
        }
示例#3
0
 public void Stop()
 {
     _engineStatus = EngineStatusEnum.Stopped;
     _stopEvent.Set();   // signal to stop
     foreach (object task in _taskHandlers.Keys)
     {
     }
 }
示例#4
0
 public BeforeEngineStatusChangedEventArgs(EngineStatusEnum engineStatus)
     : base(engineStatus)
 {
 }
示例#5
0
 public EngineStatusChangedEventArgs(EngineStatusEnum engineStatus)
 {
     EngineStatus = engineStatus;
 }
示例#6
0
 /// <summary>
 /// Constructs a new instance of the TaskProcessingEngine class
 /// </summary>
 /// <param name="daMgr">DataAccessMgr object instance</param>
 /// <param name="maxTaskHandlers">Configures the engine for a maximum number of concurrent task handlers</param>
 public TaskProcessEngine(DataAccessMgr daMgr, byte maxTaskHandlers = 1)
 {
     _daMgr           = daMgr;
     _maxTaskHandlers = maxTaskHandlers;
     _engineStatus    = EngineStatusEnum.Started;
 }
示例#7
0
 public void Resume()
 {
     _engineStatus = EngineStatusEnum.Running;
     _resumeEvent.Set();   // signal to resume
 }
示例#8
0
 public void Pause()
 {
     _engineStatus = EngineStatusEnum.Paused;
 }