我有一個簡單的Azure Worker角色,每隔幾秒執行一次任務。以下是完成此操作的代碼。以不同的間隔在Azure Worker角色中執行任務
public override void Run()
{
try
{
while (true)
{
DoSomething();
System.Threading.Thread.Sleep(3000);
}
}
catch (Exception ex)
{
Log.Add(ex, true);
}
}
我現在想要做的是添加第二個任務DoSomethingElse(),每天只觸發一次。我認爲一對夫婦的方式來做到這一點的:
- 添加調用新任務每n個循環
- 添加條件邏輯,目前的時間比較的規定時間的新任務計數器天
- 使用一些TBD調度庫(如Quartz.NET)
前兩種解決方案罷工我很脆無需額外的代碼來處理,其中該服務被停止並重新啓動的情況。第三種解決方案讓我覺得可能是過度殺傷力。
我的問題是,在Azure工作者角色內以不同時間間隔安排任務的最佳做法是什麼?我有一個輕微的偏好,堅持使用直接的.NET,而不是使用第三方庫(儘管我不排除它)。
注意,#3以上來自這些老版本的問題Recommend a C# Task Scheduling Library
讓我們暫時將執行數據保存到SQL Azure數據庫。我可以在DoSomethingElse()中構建一個簡單的檢查,用於確定數據庫的上次運行時間。這意味着要ping數據庫來每3秒執行一次檢查。這是一個壞主意嗎?這是很多不必要的數據庫訪問。但是再次,數據庫服務器不太可能因這種微不足道的交易而緊張。思考? – hughesdan