// Known Bugs: It is theoretically possible to "skip" an alarm if within seconds of one another    
        // TODO: One thread per alarm; sub-second accuaracy, replace TimeSpan with maths 
        static DateTime? Watcher(DateTime[] alarms)
        {
            // Find the next nearest alarm. 
            long nextAlarm = -1;
            foreach (DateTime alarm in alarms)
                if (alarm.Ticks - DateTime.Now.Ticks > 0 && (alarm.Ticks < nextAlarm || nextAlarm == -1))
                    nextAlarm = alarm.Ticks;

            // Below checks/sleeps are "optional." They just save it calling DateTime.Now every 1000 ms. 
            while (TimeSpan.FromTicks(nextAlarm - DateTime.Now.Ticks).Days > 0)
                Thread.Sleep(86400000);

            while (TimeSpan.FromTicks(nextAlarm - DateTime.Now.Ticks).Hours > 0)
                Thread.Sleep(3600000);

            while (TimeSpan.FromTicks(nextAlarm - DateTime.Now.Ticks).Minutes > 0)
                Thread.Sleep(60000);

            // Do not remove the below. Is the actual production code within this function. 
            while (TimeSpan.FromTicks(nextAlarm - DateTime.Now.Ticks).Seconds > 0)
                Thread.Sleep(1000);

            if (nextAlarm == -1)
                return null;

            Thread.Sleep(1000); // Stops re-trigging within the second. Technically might trigger after target second.  
            return new DateTime(nextAlarm); // Object reference to the original alarm would be cheaper here. 
        }

        static void Main()
        {
            DateTime[] alarms = new DateTime[] { new DateTime(2012, 04, 06, 10, 01, 30), new DateTime(2012, 04, 06, 10, 02, 30) };
            do
            {
                DateTime? trigger = Watcher(alarms); 
                if(trigger == null) // We're out of alarms, time to die
                    break;
                Console.WriteLine(trigger.ToString());
            } while (true); 
        }