首页 > 解决方案 > 在特定时间只运行一次 azure 函数?

问题描述

所以我正在发送移动应用推送通知,并且我已经设置了 Azure 通知中心,但我想在其中进行调度,我知道在 azure 中有一个选项可以做到这一点,因为它需要 200 美元决定创建 Azure Functions 来处理它,

我已经浏览了 NCRON 表达式,现在我想知道如何安排作业在特定日期运行一次,我能找到的只是基于重复的作业,并且是否可以像日期一样动态运行作业各不相同

 public static class Function1
{
    [FunctionName("Function1")]
    public static void Run([TimerTrigger("0 0 15 2 Jan")]TimerInfo myTimer, ILogger log)
    {
        log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
    }
}

我试图做这样的事情,在 1 月 2 日 15:00Hrs 运行一些东西,它似乎不起作用,我在这里遗漏了什么以及如何制作TimerTrigger动态任何输入将不胜感激

谢谢

标签: c#.netazure-functionsncron

解决方案


为了清楚地描述,我重新编辑了整个答案。希望这次我能解释清楚。

好的。首先,你需要知道,azure Function 有一个声明部分和一个配置部分。

在本地,声明部分是([TimerTrigger("* * * * * *")]TimerInfo myTimer, ILogger log),配置部分是local.settings.json文件。

部署到 Azure 时。它改变。声明部分变为function.json,而Application Settings成为配置部分。

根据您的要求,您可以在配置部分添加一个键并在您的函数中获取它。

例如,

在本地:

函数.cs:

using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;

namespace TimeTrigger
{
    public static class Function1
    {
        [FunctionName("Function1")]
        public static void Run([TimerTrigger("%Schedule%")]TimerInfo myTimer, ILogger log)
        {
            log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
        }
    }
}

local.settings.json:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "Schedule": "* * * * * *"
  }
}

您可以通过更改json中key的值来更改timetrigger的触发方式。(例如,使用powershell修改值。或者您可以使用代码修改。)


在门户网站:

与本地类似,您可以在门户网站上执行此操作:

声明部分:

在此处输入图像描述

配置部分:

在此处输入图像描述

在此处输入图像描述


推荐阅读