Внезапная остановка System.Timers.Timer, как это могло произойти - C#
Формулировка задачи:
Есть служба виндовс в которой курится один таймер следующим образом
При старте службы это дело все запускается вызовом Init и начинает крутиться. Ну так на вскидку этот цикл не должен никогда остановится за счет try - finally. В общем то оно так и было уже около года пока недавно он не стал останавливаться, судя по тому что говорит дебаггер студии когда я приаттачился к запущенному сервису, который перестал работать как надо. Причем что интересно этот кусок не менялся уже месяца 3-4 вообще и все работало до этой недели.
Вопрос состоит в том что могло произойти и как это можно исправить? Пока только есть идея добавить try catch в блок finally на cacheUpdater.Start(); Не уж то тут может быть ошибка?)
Листинг программы
- static class TaskCallInfoCache
- {
- static Timer cacheUpdater = new Timer();
- public static void Init()
- {
- cacheUpdater.Elapsed += dbTaskUpdate_Elapsed;
- cacheUpdater.Interval = 1000;
- FillCahce();
- cacheUpdater.Start();
- }
- private static void dbTaskUpdate_Elapsed(object sender, ElapsedEventArgs e)
- {
- FillCahce();
- }
- private static void FillCahce()
- {
- try
- {
- cacheUpdater.Stop();
- //некая логика
- }
- catch(Exception ex)
- {
- //тут идет сохранение ошибки в БД. По логам ошибки даже не было
- }
- finally
- {
- cacheUpdater.Start();
- }
- }
- }
Решение задачи: «Внезапная остановка System.Timers.Timer, как это могло произойти»
textual
Листинг программы
- public static void Init()
- {
- cacheUpdater.Elapsed += dbTaskUpdate_Elapsed;
- cacheUpdater.Interval = 1000;
- FillCacheWrapper();
- cacheUpdater.Start();
- }
- private static void dbTaskUpdate_Elapsed(object sender, ElapsedEventArgs e)
- {
- FillCacheWrapper();
- }
- private static void FillCacheWrapper()
- {
- try
- {
- FillCache();
- }
- catch(Exception ex)
- {
- //тут идет сохранение ошибки в БД. По логам ошибки даже не было
- }
- }
- private static void FillCahce()
- {
- cacheUpdater.Stop();
- //некая логика
- // ...
- cacheUpdater.Start();
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д