2015-03-31 60 views
5

是否可以在Azure webjob中爲單個非觸發函數設置單獨的日程安排?我問,因爲我有六項個人任務,我想在一天的不同時間以不同的時間間隔運行,並且不想爲每個任務創建一個單獨的項目。Azure webjob函數的單獨計劃?

+0

對不起。不明白。你想要一個持續運行的webjob內部有不同的子作業嗎?每個分工都有不同的時間表? – 2015-04-01 06:26:58

+0

一個webjob可以暴露各種功能。在我的情況下,我希望所有這些都被安排,而不是觸發。因此,我有用NoAutomaticTrigger屬性裝飾的多個功能,並希望以不同的時間表觸發每個功能。 – 2015-04-01 12:52:17

+0

在像你這樣的情況下,我使用了一個連續運行的控制檯應用程序,對內部和定製的活動進行管理。 – 2015-04-02 12:01:37

回答

7

是的,你可以使用TimerTriggerAttribute

下面是一個示例代碼:

public class Program 
{ 
    static void Main(string[] args) 
    { 
     JobHostConfiguration config = new JobHostConfiguration(); 

     // Add Triggers for Timer Trigger. 
     config.UseFiles(filesConfig); 
     config.UseTimers(); 
     JobHost host = new JobHost(config); 
     host.RunAndBlock(); 
    } 

    // Function triggered by a timespan schedule every 15 sec. 
    public static void TimerJob([TimerTrigger("00:00:15")] TimerInfo timerInfo, 
           TextWriter log) 
    { 
     log.WriteLine("1st scheduled job fired!"); 
    } 

    // Function triggered by a timespan schedule every minute. 
    public static void TimerJob([TimerTrigger("00:01:00")] TimerInfo timerInfo, 
           TextWriter log) 
    { 
     log.WriteLine("2nd scheduled job fired!"); 
    } 
} 

您還可以使用cron表達式來指定觸發功能:

Continuous WebJob with timer trigger and CRON expression

+0

這對Azure.Storage大於5.0.2存在依賴性問題,將不會安裝。我正在使用最新的Storage 6.2.0,需要和備用解決方案。 – 2016-03-15 15:38:17

+0

但整個Webjob SDK與Azure.Storage <= 5.0.2存在依賴關係 – Thomas 2016-03-15 20:21:04

+0

正確,我最終在https://www.myget.org/F/azure-appservice上使用了預發佈版本的Azure App Service nuget源代碼/api/v3/index.json TimerJob非常易於使用。 :) – 2016-03-16 17:31:46

0

您可以使用Thread.Sleep()在每次迭代結束時暫停的無限循環編寫普通的舊控制檯應用程序。每次循環喚醒時,它都會檢查它在內部保存的時間表,並調用當時應該運行的任何函數。時間表可以存儲在app.config中,以便您可以在不重新編譯WebJob的情況下對其進行更改,只需上傳新的app.config並重新啓動即可。

或者如果您願意,可以省略無限循環並以固定的時間間隔(例如每30分鐘一次)安排WebJob,並在每次運行時檢查其內部時間表。

0

我最終使用Quartz.net連續作業調度web作業內部的各種活動。這工作得很好。