我有这种扩展方法,可以在给定间隔后禁用计时器。是否可以保证GC不会销毁disableTimer变量(此方法中的局部变量)?还是有理由说明为什么此代码从现在开始的一个小时内就会生效。
timer.DisableAfter(1.Hours()) :
public static void DisableAfter(this Timer timer, TimeSpan timeSpan)
{
var disableTimer = new Timer(timeSpan.TotalMilliseconds)
{
AutoReset = false,
};
disableTimer.Elapsed += (sender, e) =>
{
timer.Stop();
disableTimer.Stop();
};
disableTimer.Start();
}
最佳答案
没有担保,它是否会被垃圾收集,但是如果您不保留对计时器的引用,则肯定有资格进行收集。
请参阅此MSDN页面中的Timer,转到第一个示例源代码块,阅读上面的文本,以及显然是源代码块本身……实际上,所有有关Timer的垃圾收集。
http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx