2012-06-05 33 views
8

我有一個簡單的Azure工作者角色在每天下午12點執行一項任務。以下是完成此操作的代碼。如何在Windows Azure工作角色中安排任務

public override void Run() 
{ 
    try 
    { 
     while (true) 
     { 
       int time = Convert.ToInt32(DateTime.Now.TimeOfDay); 
       if (time == 12) 
       { 
        DoSomethingElse(); 
       } 
     } 

    } 
    catch (Exception ex) 
    { 
     Log.Add(ex, true); 
    }    
} 

這裏DoSomethingElse()是在每天下午12點發送電子郵件的方法,同時也觸發一次,並每天只有一次。

我如何能實現調度時,時間是晚上12點火和執行DoSomethingElse()

我的問題是:這是(上面的代碼)是最好的方法或使用任何第三方工具。

+0

可能重複的 - 我怎麼運行的Web服務調用一個函數每隔一小時的工作嗎? ](http://stackoverflow.com/questions/8548159/azure-how-do-i-run-a-job-that-c​​alls-a-function-in-the-webservice-every-hour) –

+0

在一邊 - 注意,上面的代碼會導致嚴重的循環,CPU以100%的比例持續運行,並可能導致Azure重新啓動您的輔助角色。你至少需要在那裏發表睡眠聲明。或者使用計時器等待。但是,無論如何,由於多實例,您需要像調用Makogon所說的那樣尋找其他調度的答案。 – Frans

回答

5

這裏有幾個其他問題可以解決這個問題(我已經在上面標記了一個)。話雖如此,在重複什麼其他的答案已經狀態的風險:

在你的情況下,在Windows Azure的隊列一個簡單的信息,延時不顯示,直到中午,會工作。這也有助於處理多實例場景:如果您正在運行角色的兩個實例,則不希望相同的計劃任務運行兩次,因此您需要一種方法讓這些實例中只有一個執行此代碼。這很容易通過隊列消息來處理,或者您可以通過使用像blob租約(它可能只有一個針對它的寫入鎖)作爲互斥體,在單個實例上運行調度程序代碼。這涵蓋在@ smarx的博文中,here

+0

但我有一個疑問,如果我通過隊列消息實現它仍然exixt becase多個實例將同時創建多個que消息。 – Hope

+1

確實,這是一個啓動問題。考慮通過blob鎖定的互斥鎖。@smarx在他的博客文章[這裏]中介紹了這一點(http://blog.smarx.com/posts/building-a-task-scheduler-in-windows-azure)。 –

+0

Azure現在有一個簡單的調度程序服務,它根據高度可配置的時間表調用端點。問題是它不適用於長時間運行的進程。超時時間爲30秒,不可配置。 – AntonK

0

雲計劃雲計算中的任務調度專門處理。

我剛碰到這個,所以我沒有嘗試過。

http://getcloudscheduler.com/

更新:忘記雲調度!我連續運行了600次我的日程安排,導致600封電子郵件被髮送給我的客戶。不要使用!

0

使用Azure Task Scheduler。 Scott Gu here不錯的教程。

具體來說,我想看看存儲隊列動作類型 - 只是註冊在你的Worker角色隊列中的事件。

(請注意,如果你想更頻繁地安排任務比每小時這項服務可能需要花錢。)[天青

+0

我同意。這是最簡單的方法。只需使用webhook來觸發事件。然而,Azure Task Scheduler的功能卻非常昂貴。 –

相關問題