我有使用定時器或使用睡眠兩種可供選擇的是什麼,我需要調用一個方法,這個方法完成每3秒後,我寫了基本的例子來證明我的意思:我應該使用休眠或定時器
public static void Main()
{
new Thread(new ThreadStart(fooUsingSleep)).Start();
callToMethodAfterInterval(new Action<object, ElapsedEventArgs>(fooUsingTimer), 3000);
}
public static void fooUsingSleep()
{
Console.WriteLine("Doing some consuming time work using sleep");
Thread.Sleep(3000);
fooUsingSleep();
}
public static void fooUsingTimer(object dummy, ElapsedEventArgs dummyElapsed)
{
Console.WriteLine("Doing some consuming time work usning timer");
callToMethodAfterInterval(new Action<object, ElapsedEventArgs>(fooUsingTimer), 3000);
}
public static void callToMethodAfterInterval(Action<object,ElapsedEventArgs> inMethod, int inInterval)
{
System.Timers.Timer myTimer = new System.Timers.Timer();
myTimer.Elapsed += new ElapsedEventHandler(inMethod);
myTimer.Interval = inInterval;
myTimer.AutoReset = false;
myTimer.Start();
}
所以我的問題是
1)我可以用計時器寫更優雅的代碼嗎?意味着從fooUsingTimer中移除對callToMethodAfterInterval方法的調用,使定時器一行或兩行,並從fooUsingTimer的聲明中刪除虛擬變量?
2)我明白睡眠不忙等待(http://www.codeproject.com/KB/threads/ThreadingDotNet.aspx) 所以我沒有發現在這裏使用定時器選項的理由,因爲睡眠更簡單,有什麼更好的使用,定時器版本還是睡眠版本?
3)我知道,Timers.timer是線程安全的,它可以幫助我在我想要實現的行爲?
謝謝。
我會注意到,我不認爲這正是原來的意圖所做的 - 這是做長時間運行的任務,然後在完成後3秒再次運行它 - 您的每秒都會運行? – Paddy 2011-01-13 12:31:37
@ Paddy,對,我假設一個相對較短的任務。 OP應該告訴。 – 2011-01-13 13:35:43