System.Threading.Timer并不总是被调用

时间:2016-04-28 08:14:13

标签: 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) {
            new Timer(Callback, task, mSec, Timeout.Infinite);
        }
    }
}

我这样用:

TaskExecutor.DelayExecute(10000, () => { Console.WriteLine("Haha..."); });

但是,计时器似乎并不是每次都能正常工作。这意味着有时它很好,有时它很糟糕。为什么?我怎样才能做到对不对?

1 个答案:

答案 0 :(得分:1)

您必须拥有对您创建的Timer对象的引用。否则它将由GC收集。