如何仅在 Azure 函数中 运行 功能

How to run functionality only sometimes in an Azure function

我有一个带触发器的 Azure 函数,每 15 分钟 运行 一次:

TimerTrigger("0 */15 * * * *", RunOnStartup =false)

在此函数中,有些功能我只想每小时 运行 一次。我目前正在检查当前时间的分钟以查看它是否应该 运行 。但据我所知,Azure 函数触发器并不总是精确的(这是 运行 在基于消费的应用程序服务上),所以我正在检查分钟范围。

int currentMinute = DateTime.Now.Minute;
bool extraFunctionality = (currentMinute >= 58 && currentMinute <= 2);

这似乎行得通;仅 运行 在“:00”运行 秒内启用此功能,每小时一次。但是,出于以下几个原因,它对我来说似乎是错误的代码:

在 Azure 函数中是否有更好/更合适的方法来执行此操作?我能否从 TimerInfo 参数或 ExecutionContext 参数中获取有关哪个 15 分钟触发器导致函数 运行 的信息?或者我可以有一个单独的 TimerTrigger,每小时 运行s 一次,然后根据 2 个定时器中的哪一个导致函数触发而具有不同的功能?或者有什么方法可以让 TimerTrigger 本身传入一个参数,告诉我它在哪个 15 分钟 window?

或者,我的代码可以吗?也许对我允许它关闭的分钟数进行一些调整?

您可以创建两个 Azure Functions,一个在整点 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 表达式是否正确