[英]How to run functionality only sometimes in an Azure function
我有一個 Azure function 觸發器,讓它每 15 分鍾運行一次:
TimerTrigger("0 */15 * * * *", RunOnStartup =false)
在這個 function 中,有些功能我只想每小時運行一次。 我目前正在檢查當前時間的分鍾以查看它是否應該運行。 但據我了解,Azure function 觸發器並不總是精確的(這是在基於消費的應用程序服務上運行的),因此我正在檢查一系列分鍾。
int currentMinute = DateTime.Now.Minute;
bool extraFunctionality = (currentMinute >= 58 && currentMinute <= 2);
這似乎行得通; 僅在“:00”運行期間運行此功能,每小時一次。 但是,出於以下幾個原因,對我來說它看起來像是錯誤的代碼:
在 Azure 函數中是否有更好/更合適的方法來執行此操作? 我能否從 TimerInfo 參數或 ExecutionContext 參數中獲取有關哪個 15 分鍾觸發器導致 function 運行的信息? 或者我可以有一個每小時運行一次的單獨 TimerTrigger,然后根據 2 個計時器中的哪一個導致 function 觸發而具有不同的功能? 或者有什么方法可以讓 TimerTrigger 本身傳入一個參數,告訴我它在哪個 15 分鍾 window 中?
或者,我的代碼按原樣好嗎? 也許對我允許它關閉的分鍾數進行了一些調整?
您可以創建兩個 Azure 函數,一個在整點后 15、30、45 分鍾運行,另一個在整點運行。 然后在這些函數中的每一個中設置一個變量,以確定它是否在整點運行。
[FunctionName("HourlyFunction")]
public static void RunHourly([TimerTrigger("0 0 15,30,45 * * *")]TimerInfo myTimer, ILogger log)
{
_myService.Run(true);
}
[FunctionName("FifteenMinuteFunction")]
public static void RunEveryFifteen([TimerTrigger("0 0 * * * *")]TimerInfo myTimer, ILogger log)
{
_myService.Run(false);
}
然后有一個單獨的服務可以被這些功能調用:
public class MyService : IMyService
{
public async Task Run(bool isHourlyRun)
{
// Do work here
}
}
* 我不確定那些 cron 表達式是否正確
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.