/// <summary> /// Initialize Requirement /// Set timer /// </summary> /// <param name="addNewSchedule">Specify add new Schedule</param> #region Initialize private void Initialize(bool addNewSchedule) { if (addNewSchedule) { // Set Identity _ScheduleItem = new G9ScheduleItem.G9ScheduleItem(); _ScheduleItem.Identity = ScheduleIdentity = Guid.NewGuid(); // Add schedule SaveScheduleTask.Add(ScheduleIdentity, _ScheduleItem); } if (!_activeSchedule) { _activeSchedule = true; Task.Run(async() => { while (true) { // Check Schedule handler method finished or no if (_waitForFinishScheduleHandler) { // if not finished Delay and check again await Task.Delay(1); } else { // if finished run Schedule handler again and wait await ScheduleHandler(); await Task.Delay(1); } } }); } }
/// <summary> /// Remove Schedule item from category /// Helper method /// </summary> /// <param name="g9ScheduledItem">Specify Schedule item</param> #region removeScheduleItem private static void removeScheduleItem(KeyValuePair <Guid, G9ScheduleItem.G9ScheduleItem> g9ScheduledItem) { // remove from schedule try { // Run all finish call back foreach (var actions in g9ScheduledItem.Value.FinishCallBack) { actions?.Invoke(); } } catch (Exception ex) { foreach (var action in g9ScheduledItem.Value.ErrorCallBack) { action?.Invoke(ex); } } finally { try { // Remove SaveScheduleTask.Remove(g9ScheduledItem.Key); } catch { // Ignore } } }
/// <summary> /// Constructor - Restore Schedule by identity /// Initialize Requirement /// </summary> /// <param name="ScheduleIdentity">Specify Schedule identity for restore enable Schedule</param> #region G9Scheduled public G9Schedule(Guid ScheduleIdentity) { if (!SaveScheduleTask.ContainsKey(ScheduleIdentity)) { throw new Exception("Schedule not found!"); } _ScheduleItem = SaveScheduleTask[ScheduleIdentity]; this.ScheduleIdentity = ScheduleIdentity; Initialize(false); }
/// <summary> /// Dispose this Schedule /// </summary> #region Dispose public void Dispose() { if (SaveScheduleTask[ScheduleIdentity].DisposeCallBack == null) { SaveScheduleTask[ScheduleIdentity].DisposeCallBack = new HashSet <Action>(); } foreach (var action in SaveScheduleTask[ScheduleIdentity].DisposeCallBack) { action?.Invoke(); } SaveScheduleTask.Remove(ScheduleIdentity); ScheduleIdentity = Guid.Empty; _ScheduleItem = null; }