Я использую system.timer в службе Windows для запуска процесса, который обычно превышает интервал таймера. Я пытаюсь не дать таймеру запускать один и тот же код более одного раза, известная проблема с system.timers.
Что я хочу: таймер запускает мой код, но таймер «останавливается», чтобы дождаться завершения кода, прежде чем возобновить тики.
У меня две проблемы:
Способ работы system.timers заключается в том, что таймер создаст для вас состояние гонки, запустив новые избыточные потоки того же кода и накапливая их на вас, если они не завершились к тому времени, когда истек интервал таймера.
Я бы запустил/остановил таймер, чтобы этого не произошло, но с помощью System.Timers.Timer, как только вы остановите таймер для завершения обработки, он никогда не вернется - я никогда не мог перезапускать таймер после того, как он был остановлен, он был уничтожен и, вероятно, собран. Включение/отключение — это то же самое, что запуск/остановка с теми же результатами.
Как удержать system.timer от запуска новых избыточных потоков одного и того же кода, если процесс не завершился к моменту истечения интервала таймера? Очевидно, что запуск/остановка (включение/выключение) таймера НЕ является решением, так как он не работает.
Помощь!