Если вы говорите о System.Threading.Timer
, он реализует IDisposable
, поэтому вам следует сохранить ссылку на него, чтобы вы могли вызывать Dispose, когда вы его больше не используете.Я не знаю ответа на ваш конкретный вопрос, но вы можете исследовать его в консольном приложении, выполнив много итераций и заставив GC.Collect()
проверить, продолжает ли срабатывать таймер.Я предполагаю, что в конечном итоге он будет собран и прекратит срабатывание, если только внутри не будет создана какая-то статически укорененная ссылка.
В примечании, если вам нужен одноразовый таймер «Забей и забудь», вы можетереализовать его, создав объект состояния со ссылкой на таймер, чтобы он мог утилизировать себя при возникновении события таймера.У меня есть класс TimerService
с методом WhenElapsed(TimeSpan, Action)
, который использует этот шаблон, и он очень удобен для создания тайм-аутов без необходимости управлять экземпляром Timer как полем в содержащем классе.