Tôi sử dụng mã sau trong trang web asp.net.Sử dụng System.Timers.Timer trong asp.net
Trên ứng dụng init tôi gọi InitializeTimer() một lần.
Mục tiêu của mã là chạy DoWork() một lần mỗi giờ (1 lần mỗi giờ).
Tôi cũng muốn mã thực thi trên mọi thời gian khác nhau mỗi vòng vì vậy tôi đã thêm phần ngẫu nhiên.
Kết quả tôi nhận được là không thành công, tôi không thể tìm thấy giải thích tại sao xảy ra.
Mã này thực hiện các chức năng sau 2 giờ, sau đó một lần nữa sau 2 giờ, sau đó sau khi 3hrs thì sau 2 giờ và 2 giờ một lần nữa. ****
Ai có thể giải thích lý do?
using System.Timers;
....
private static random = new Random();
....
public static void InitializeTimer()
{
tTimer = new Timer();
tTimer.AutoReset = true;
tTimer.Interval = TimeSpan.FromHours(1.0).TotalMilliseconds;
tTimer.Elapsed += new ElapsedEventHandler(ClassName1.tMailer_Elapsed);
tTimer.Start();
}
private static void tTimer_Elapsed(object sender, ElapsedEventArgs e)
{
tTimer.Interval += random.Next(-5, 5);
DoWork();
}
Cập nhật:
Xin đừng gửi "sử dụng cửa sổ dịch vụ", hoặc "scheduled task". Câu hỏi của tôi là dành cho mã sau đây Tôi không tìm kiếm giải pháp thay thế tốt hơn. Ngoài ra, trong thời gian thử nghiệm này (10 giờ), trang web có lưu lượng truy cập cao, iis pool không khởi động lại!
Dựa trên MSDN sau đây: (http://msdn.microsoft.com/en-us/library/system.timers.timer.interval.aspx)
Nếu khoảng thời gian được thiết lập sau khi Timer đã bắt đầu, đếm được đặt lại. Ví dụ: , nếu bạn đặt khoảng thời gian là 5 giây và sau đó đặt thuộc tính Đã bật thành true, số đếm bắt đầu tại thời gian Bật được đặt. Nếu bạn đặt lại khoảng thời gian 10 giây khi đếm là 3 giây, sự kiện đã qua là được tăng lên lần đầu tiên 13 giây sau khi Đã bật được đặt thành true.
Có thể thiết lập lại khoảng thời gian trong hàm đã trôi qua là nguyên nhân của sự cố không?
Có nghĩa là khi hàm tTimer_Elapsed được gọi là số đếm là 1 giờ (tối thiểu một phần nghìn giây) và mã của tôi "tTimer.Interval + = random.Next (-5, 5);" đang thêm một giờ nữa vào Khoảng thời gian?
Nếu bạn lấy phần ngẫu nhiên, mã có hoạt động như mong đợi không? – mpeterson
tôi không biết, mã đang chạy trên máy chủ sản xuất, tôi không thể thay đổi nó ngay bây giờ (một wont có thể cho một vài ngày), đó là lý do tại sao tôi hỏi câu hỏi để tìm một giải thích. – RuSh
Vậy điều đó có nghĩa là nó hoạt động như mong đợi khi thử nghiệm cục bộ? – mpeterson