簡體   English   中英

System.Timers.Timer長時間間隔

[英]System.Timers.Timer for long time intervals

System.Timers.Timer是否足以在更長的時間間隔內調用方法? 即日常工作和類似的事情。 有更好的東西可供我使用嗎?

例:

System.Timers.Timer timer = new System.Timers.Timer();
timer.Elapsed += new System.Timers.ElapsedEventHandler(DoTimedWork);
timer.Interval = 1000 * 60 * 60 * 24; // 24 Hours
timer.Start();

謝謝!

您的申請流程如何啟動? 最好以24小時間隔使用System.Timers.Timer ,前提是您可以保證進程仍可以運行以處理計時器回調-您的進程可能存在內存泄漏或資源泄漏,導致操作系統被終止它,或者它可以托管在通常“回收”進程的環境中(例如IIS中的應用程序池)。

更好的解決方案是同時具有以下兩種功能:在應用程序中啟動計時器,但還具有cron-job(Windows上為“計划任務”),如果尚未運行該程序,它將啟動您的程序-您可以使用系統范圍的互斥鎖和其他IPC意味着確保一次僅運行一個應用程序實例。

只要您的進程在此期間實際上仍處於活動狀態(例如,因為它是Windows服務),那么計時器就可以了。

如果您需要在指定時間執行某項操作並且不能保證您的進程正在運行,那么使用Windows Task Scheduler可能是一個不錯的選擇。

如果您需要更多選項,則可能需要研究諸如Quartz之類的調度庫。

我使用Hangfire 有很棒的功能,例如“一勞永逸”任務,延遲任務,重復任務。 后台作業被保存到SQL Server,Redis,PostgreSQL,MongoDB等持久性存儲中。 您可以將其作為控制台應用程序,Windows Service,Azure Worker Role等運行。也是開源的,完全免費用於商業用途

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM