C# System.Threading.Timer并不总是被调用
我编写了一个用于执行延迟任务的简单助手类:C# System.Threading.Timer并不总是被调用,c#,.net,multithreading,C#,.net,Multithreading,我编写了一个用于执行延迟任务的简单助手类: 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) {
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..."); });
然而,计时器似乎并非每次都工作。这意味着有时是好的,有时是坏的。为什么?我怎样才能使它正确呢?您必须在某个地方引用您创建的
计时器
对象。否则它将由GC收集。您能否不使用Task.Delay(10000)。ContinueWith(…)代码>而不是编写新代码和使用计时器等?此外,您的具体问题将在:“只要使用计时器,就必须保留对它的引用。与任何托管对象一样,当没有对计时器的引用时,计时器将接受垃圾收集。计时器仍然处于活动状态这一事实并不能阻止它被收集。”@Damien_不信者,是的,我认为这就是问题所在。我没有保留对计时器的引用。