Внезапная остановка System.Timers.Timer, как это могло произойти - C#

Узнай цену своей работы

Формулировка задачи:

Есть служба виндовс в которой курится один таймер следующим образом
Листинг программы
  1. static class TaskCallInfoCache
  2. {
  3. static Timer cacheUpdater = new Timer();
  4. public static void Init()
  5. {
  6. cacheUpdater.Elapsed += dbTaskUpdate_Elapsed;
  7. cacheUpdater.Interval = 1000;
  8. FillCahce();
  9. cacheUpdater.Start();
  10. }
  11. private static void dbTaskUpdate_Elapsed(object sender, ElapsedEventArgs e)
  12. {
  13. FillCahce();
  14. }
  15. private static void FillCahce()
  16. {
  17. try
  18. {
  19. cacheUpdater.Stop();
  20. //некая логика
  21. }
  22. catch(Exception ex)
  23. {
  24. //тут идет сохранение ошибки в БД. По логам ошибки даже не было
  25. }
  26. finally
  27. {
  28. cacheUpdater.Start();
  29. }
  30. }
  31. }
При старте службы это дело все запускается вызовом Init и начинает крутиться. Ну так на вскидку этот цикл не должен никогда остановится за счет try - finally. В общем то оно так и было уже около года пока недавно он не стал останавливаться, судя по тому что говорит дебаггер студии когда я приаттачился к запущенному сервису, который перестал работать как надо. Причем что интересно этот кусок не менялся уже месяца 3-4 вообще и все работало до этой недели. Вопрос состоит в том что могло произойти и как это можно исправить? Пока только есть идея добавить try catch в блок finally на cacheUpdater.Start(); Не уж то тут может быть ошибка?)

Решение задачи: «Внезапная остановка System.Timers.Timer, как это могло произойти»

textual
Листинг программы
  1. public static void Init()
  2.     {
  3.         cacheUpdater.Elapsed += dbTaskUpdate_Elapsed;
  4.         cacheUpdater.Interval = 1000;
  5.         FillCacheWrapper();
  6.         cacheUpdater.Start();
  7.     }
  8.  
  9.     private static void dbTaskUpdate_Elapsed(object sender, ElapsedEventArgs e)
  10.     {
  11.         FillCacheWrapper();
  12.     }
  13.  
  14.  
  15.  
  16.  private static void FillCacheWrapper()
  17. {
  18.     try
  19.         {              
  20.             FillCache();
  21.          }
  22.          catch(Exception ex)
  23.         {
  24.         //тут идет сохранение ошибки в БД. По логам ошибки даже не было
  25.         }        
  26. }
  27.  
  28. private static void FillCahce()
  29.     {
  30.                      
  31.             cacheUpdater.Stop();
  32.             //некая логика    
  33.             // ...    
  34.             cacheUpdater.Start();        
  35.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут