簡體   English   中英

如何僅有時在 Azure function 中運行功能

[英]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”運行期間運行此功能,每小時一次。 但是,出於以下幾個原因,對我來說它看起來像是錯誤的代碼:

  • 最多提前 2 分鍾和最多延遲 2 分鍾的數字幾乎是任意選擇的; 我不知道在那里使用什么樣的時間跨度。
  • 它依賴於使用 DateTime.Now,它將根據服務器設置返回不同的結果,即使我不關心當前分鍾以外的任何內容。
  • 代碼讀起來不像是要讓它每小時運行一次。

在 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.

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