Created
September 20, 2013 07:18
-
-
Save yemrekeskin/6634275 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // Contract | |
| public interface IScheduledTaskManager | |
| { | |
| void AddAbsoluteTask(Action task, int absoluteMinute); | |
| void AddAbsoluteTask(Action task, int absoluteHour, int absoluteMinute); | |
| void AddSlidingTask(Action task, int slidingMinute); | |
| void AddSlidingTask(Action task, int slidingHour, int slidingMinute); | |
| } | |
| // Main Class | |
| public class ScheduledTaskManager | |
| : IScheduledTaskManager , IDisposable | |
| { | |
| List<Task> Tasks = new List<Task>(); | |
| private Timer Timer; | |
| private Func<DateTime> Watch; | |
| public ScheduledTaskManager(Func<DateTime> currentTimeWatch = null) | |
| { | |
| Watch = currentTimeWatch ?? new Func<DateTime>(Helper.GetCurrentDatetime); | |
| Timer = new System.Timers.Timer(1000); | |
| Timer.Elapsed += Timer_Elapsed; | |
| Timer.Start(); | |
| } | |
| void Timer_Elapsed(object sender, ElapsedEventArgs e) | |
| { | |
| foreach (var t in Tasks) | |
| if (t.IsTime()) | |
| t.Action.Invoke(); | |
| } | |
| public void Dispose() | |
| { | |
| Timer.Stop(); | |
| Timer.Dispose(); | |
| } | |
| /// Run at every hour at given minute | |
| public void AddAbsoluteTask(Action task, int absoluteMinute) | |
| { | |
| Tasks.Add(new Task { Action = task, AbsoluteMinute = absoluteMinute }); | |
| } | |
| /// Run every day at given hour and minute | |
| public void AddAbsoluteTask(Action task, int absoluteHour, int absoluteMinute) | |
| { | |
| Tasks.Add(new Task { Action = task, AbsoluteMinute = absoluteMinute, AbsoluteHour = absoluteHour }); | |
| } | |
| /// Run after given minutes from last execution | |
| public void AddSlidingTask(Action task, int slidingMinute) | |
| { | |
| Tasks.Add(new Task { Action = task, SlidingMinute = slidingMinute }); | |
| } | |
| /// Run after given hours + minutes from last execution | |
| public void AddSlidingTask(Action task, int slidingHour, int slidingMinute) | |
| { | |
| Tasks.Add(new Task { Action = task, SlidingMinute = slidingMinute, SlidingHour = slidingHour }); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment