1
我写了一个简单的辅助类执行延迟的任务:System.Threading.Timer并不总是叫
public class TaskExecutor {
private static void Callback(object state) {
((Action)state)(); //Not always be called
}
public static void DelayExecute(int mSec, Action task) {
if (task != null) {
new Timer(Callback, task, mSec, Timeout.Infinite);
}
}
}
我用这样的:
TaskExecutor.DelayExecute(10000,() => { Console.WriteLine("Haha..."); });
然而,定时器似乎并不每次工作。这意味着有时它很好,有时甚至不好。为什么?我该怎么做才对?
你不能只使用'Task.Delay(10000).ContinueWith(...);'而不是写新代码和使用定时器等吗? –
此外,您的具体问题在[文档](https://msdn.microsoft.com/en-us/library/system.threading.timer(v = vs.110).aspx)中解决:“只要你正在使用一个定时器,你必须保留对它的引用,就像任何被管理的对象一样,当一个定时器没有引用时,定时器就会被垃圾收集,事实上定时器仍然有效并不妨碍它被收集“。 –
@Damien_The_Unbeliever,是的,我认为这是问题所在。我没有提及定时器。 – guogangj