Tôi có hai lựa chọn sử dụng bộ đếm thời gian hoặc sử dụng giấc ngủ, tôi cần phải gọi một phương thức mỗi 3 giây sau khi phương pháp này kết thúc, tôi đã viết ví dụ cơ bản để chứng minh những gì tôi có nghĩa là:Những gì tôi nên sử dụng giấc ngủ hoặc hẹn giờ
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();
}
Vì vậy, câu hỏi của tôi là
1) Tôi có thể viết mã bằng bộ hẹn giờ thanh lịch hơn không? Có nghĩa là loại bỏ các cuộc gọi đến phương thức callToMethodAfterInterval từ fooUsingTimer, làm cho bộ đếm thời gian một hoặc hai dòng, và loại bỏ các biến giả từ khai báo của fooUsingTimer?
2) Tôi hiểu rằng giấc ngủ không quá bận rộn chờ đợi (http://www.codeproject.com/KB/threads/ThreadingDotNet.aspx) Vì vậy, tôi không tìm thấy lý do để sử dụng tùy chọn hẹn giờ ở đây, vì giấc ngủ đơn giản hơn, cái gì là tốt hơn để sử dụng, phiên bản hẹn giờ hoặc ngủ?
3) Tôi biết rằng Timers.timer là luồng an toàn, nó có thể giúp tôi trong hành vi mà tôi muốn thực hiện không?
Cảm ơn.
Tôi xin lưu ý rằng tôi không nghĩ rằng đây chính xác là những gì ban đầu có nghĩa là phải làm - nó đang thực hiện nhiệm vụ chạy dài và sau đó chạy lại 3 giây sau khi hoàn thành - máy của bạn sẽ chạy mỗi giây? – Paddy
@Paddy, phải, tôi đã giả định một nhiệm vụ ngắn xoay. OP nên nói. –
Tôi không muốn tùy chọn foo sẽ được gọi trước khi các cuộc gọi khác đến foo đã hoàn tất .. – Delashmate