Что если таймер не может завершить все свои работы до наступления нового времени цикла?

Предположим, у нас есть таймер, который запускается каждые 10 минут. Что делать, если цикл его обработки занимает более 10 минут. Для этого начинается новый поток? Будет ли он прервать свою текущую работу? Что если один объект мутирует внутри таймера?

Извините, если я не упомянул какой-либо код для этого, потому что проблема ясна, а также я хочу знать полный ответ с точки зрения многопоточного программиста, а не находить бесполезный ответ, пытаясь проверить его с помощью примера приложения. На самом деле, я хочу знать логику его рабочего механизма.

Ответы на вопрос(3)

Решение Вопроса

Если вы используетеSystem.Threading.Timer или жеSystem.Timers.Timer, таймер снова будет отмечен, начиная новую тему. Увидетьhttps://stackoverflow.com/a/10442117/56778 чтобы избежать этой проблемы.

Если вы используетеSystem.Windows.Forms.Timerзатем новый тик не произойдет, пока предыдущий не закончит обработку.

Поместите свой код вMonitor.TryEnter()

object timeCheck= new object();

void Timer()
{
    Monitor.TryEnter(timeCheck) 
    {
        //Code that might take too long 
        //...
        Monitor.Exit();
    }
}

для предотвращения повторного входа вы можете использовать статическое логическое значение, которое сообщает, что функция уже выполняется. Используйте try / Catch / finally и установите для этого логического значения значение false в finally, чтобы гарантировать, что логическое значение не останется ложным, если вы допустили ошибку в коде или код не удался.
Для более быстрого таймера следует предотвратить повторный вход с помощью семафора (мьютекса).

Ваш ответ на вопрос