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