Background is the following: A Windows Service which is supposed to perform an action once per day at a given time.
I have currently implemented this by creating a timer and added the ElapsedEventHandler. The event fires every t minutes and it is then checked that we are passed the configured time. If so the action is performed and if not nothing happens.
A colleague asked me if it was not easier just to have a while(true) loop containing a sleep() and then of course the same logic for checking if we are past the time for action.
Question:
Can one say anything about the “robustness” of an event vs. a while(loop)? I am thinking of the situation where the thread “dies” so the while(true) loop exits. Is this more “likely” to happen in the one scenario vs. the other?
I’d vote for neither.
If your service just sits idle for an entire day periodically waking up (and paging code in) to see if “it’s time to run”, then this is a task better suited for the Windows Task Scheduler. You can programatically install a task to run every day through the task scheduler. Then your code doesn’t need to be running at all unless it’s time to run. (Or if your service does need to run in the background anyway, the task in the scheduler can signal your service to wake up instead of timer logic).