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_不信者,是的,我认为这就是问题所在。我没有保留对计时器的引用。