Существует ли Таймер.NET, доступный в C#, который может гарантировать, что нет никакого "дрейфа" промежуточных событий? Таким образом, если Вы устанавливаете таймер для ухода каждые X секунды, что после дней работы он не будет дрейфовать, т.е. гарантировать, что количество подхода событий X секунд за день остается в синхронизации с тем, каково это должно быть?
В противном случае существует ли известный пример кода, который перенес бы Таймерную функцию в C#, чтобы сделать это?
извините, что дал только ссылку на quartz.net, но это полностью квалифицированная, корпоративная, проверенная, ... библиотека ... вам не нужно изобретать колесо :)
если вы беспокоитесь о накладных расходах, то как вы их определяете? Это размер файла (двоичные файлы около 0,5мб) или накладные расходы в логике.
Что касается логической части: я думаю, что реализация их IJob
-интерфейса делает хорошую работу, чтобы заставить потребителя улучшать код. Я не большой друг inline-методов (просто как пример, так как вы можете стрелять по их указателям по истечении таймера) - классы дали бы вам гораздо больше возможностей, и опять же, заставили бы улучшать oop, domain-design, ...
но: делать Console.WriteLine(...)
с quartz.net было бы перебором... :)
Я предполагаю, что вы уже что-то пробовали, и что это дрейфует.
Если вы хотите, чтобы что-то срабатывало, скажем, каждые 5 секунд от часа (5,10,15,20...), вы можете установить таймер на один раз, затем в обратном вызове сбросить таймер на срабатывание в DateTime.Now + количество секунд до следующего 5-секундного интервала.
Это предотвратит любое смещение до тех пор, пока ваши часы верны.
Что-то вроде этого
System.Timers.Timer timer = new Timer();
void Init()
{
timer.Elapsed += timer_Elapsed;
int wait = 5 - (DateTime.Now.Second % 5);
timer.Interval = wait*1000;
timer.Start();
}
void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
timer.Stop();
int wait = DateTime.Now.Second % 5;
timer.Interval = wait * 1000;
timer.Start();
}