簡體   English   中英

用於備份的計時器線程

[英]Timer thread for backing up

如果我想每隔5分鍾將某項保存到我的數據庫中,並且我決定為此使用一個單獨的線程(如果有更好的方法,請告訴我),那會更好:

  • 只需創建線程並將其保持睡眠狀態5分鍾,然后使其調用保存功能,然后再次睡眠即可。 要么

  • 如果可能的話,請利用Timer類(我沒有做過很多檢查)並對其進行某種倒計時,而在時間結束時,調用Save函數,然后再次開始倒計時。 要么

  • 其他方式

PS:如果您願意,可以提供代碼示例。

我建議使用System.Threading.Timer

在類中添加一個類型為System.Threading.Timer的字段:

private System.Threading.Timer _timer;

然后在您的類的構造函數中對其進行初始化:

_timer = new Timer
(
    onSave, 
    null,  // State; not used.
    TimeSpan.FromMinutes(5),
    TimeSpan.FromMinutes(5)
);

然后添加一個onSave()並將您的保存邏輯放入其中:

private void onSave(object state)
{
    // Handle your save here.
}

您不希望僅每五分鍾就為一次回調而刻錄整個線程。

使用計時器的另一個好處是,當程序要關閉(或出於任何其他原因)時,取消計時器要容易得多。 如果您有一個線程位於Sleep()中,那么取消Sleep()並不容易!

要停止運行計時器,只需執行以下操作:

_timer.Change(-1, -1);

要重新開始:

_timer.Change(TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(5));

有關更多詳細信息,請參閱System.Threading.Timer的文檔

需要注意的一件事是,對onSave()的調用是否花費的時間超過了計時器時間。 在這種情況下,您可能想在onSave()的開頭禁用計時器(通過調用_timer.Change(-1, -1); ),然后在末尾重新啟用計時器。

暫無
暫無

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

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