internal bool ShouldCancelAction(EngineStatusEnum engineStatus) { var arg = new BeforeEngineStatusChangedEventArgs(engineStatus); OnBeforeEngineChanged?.Invoke(this, arg); return(arg.Cancel); }
/// <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(); } } } }
public void Stop() { _engineStatus = EngineStatusEnum.Stopped; _stopEvent.Set(); // signal to stop foreach (object task in _taskHandlers.Keys) { } }
public BeforeEngineStatusChangedEventArgs(EngineStatusEnum engineStatus) : base(engineStatus) { }
public EngineStatusChangedEventArgs(EngineStatusEnum engineStatus) { EngineStatus = engineStatus; }
/// <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; }
public void Resume() { _engineStatus = EngineStatusEnum.Running; _resumeEvent.Set(); // signal to resume }
public void Pause() { _engineStatus = EngineStatusEnum.Paused; }