在特定时间仅运行一次天蓝色函数一次?

时间:2020-01-02 10:40:30

标签: c# .net azure-functions ncron

因此,我正在发送移动应用程序推送通知,并且我已经设置了Azure通知中心,但是我想在其中进行计划,我知道Azure内置有一个选项可以这样做,因为这会花费很多200 $我决定创建Azure函数来处理它,

我已经遍历了NCRON表达式,现在我想知道如何安排作业在特定日期运行一次,我所能找到的只是基于重复的作业,还可以像日期会有所不同

const fn = jest.mock("../../services/testService");

我试图做这样的事情,在1月2日的15:00Hrs运行某项,它似乎没有用,我在这里错过了什么吗?如何使 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}"); } } 动态 任何输入将不胜感激

谢谢

4 个答案:

答案 0 :(得分:2)

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

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

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

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

根据您的要求,您可以在配置部分添加一个密钥,并将其用于您的功能。

例如,

在本地:

function.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中键的值来更改触发时间的方式(例如,使用powershell修改值。或者可以使用代码进行修改。)


在门户网站上:

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

声明部分:

enter image description here

配置部分:

enter image description here

enter image description here

答案 1 :(得分:1)

您可以使用下面的链接生成详细的CRON表达式:

http://corntab.com/?c=0_15_2_1_ *

0 0 15 2 Jan *是生成的CRON表达式,它将在1月的第2天(每年1500小时)运行。

如@Bowman所正确建议的那样,请从上面的链接检查并验证表达式,看看是否有帮助。

答案 2 :(得分:1)

首先,您现在要想到的主要问题是表达式,您可以参考文档使用正确的表达式格式:NCRONTAB expressions

{second} {minute} {hour} {day} {month} {day-of-week}

然后关于您动态运行作业的要求。您可以将时间表表达式放入应用程序设置中,并将此属性设置为使用%符号包装的应用程序设置名称,如本示例所示:%ScheduleAppSetting%。您可以在configuration中进行检查。

即使使用此表达式,它也会显示错误,但是仍然可以使用。

enter image description here

答案 3 :(得分:0)

如果只需要运行一次,为什么要使用计时器函数?

我认为更好的解决方案是使用属性 ScheduledEnqueueTimeUtc 将消息发送到队列,使其在预定时间运行。

https://docs.microsoft.com/en-us/azure/service-bus-messaging/message-sequencing#scheduled-messages

相关问题