【问题标题】:What are the specifics of the TimerInfo class in an azure functions timer trigger?天蓝色函数计时器触发器中 TimerInfo 类的细节是什么?
【发布时间】:2020-08-17 18:28:23
【问题描述】:

我能找到的唯一文档是here,但它并没有真正解释 TimerInfo 类的属性。我有一些问题

  • 函数扩展是否使用 azure 存储来保存函数上次触发的时间并将其与当前执行时间进行比较以查看它是否错过了执行并将 IsPastDue 设置为 true?
  • 如果函数延迟几秒或几毫秒触发,或者仅当它完全错过执行时,IsPastDue 是否会设置为 true?
  • ScheduleStatus.Last 是上次触发还是刚刚根据 cron 表达式计算得出?
  • ScheduleStatus.LastUpdated 是什么,这是我上次更改 cron 表达式的时候吗?
  • 如果我通过DateTime.NowSchedule.GetNextOccurrence 会返回与ScheduleStatus.Next 相同的内容吗?

【问题讨论】:

标签: c# .net azure azure-functions


【解决方案1】:

在做了一些测试并阅读了源代码之后,这是我对它的作用的总结。我将解释UseMonitor 设置为 true 时的作用。

当函数主机启动时,它会检查 Azure 存储中最后一次执行触发器的时间。如果它从未执行过,它会根据您的 cron 表达式等待下一次计划的发生。如果它在将上次执行时间与当前时间进行比较之前已执行,以查看它是否错过了任何执行。如果它确实错过了任何它,它会立即执行您的函数并将IsPastDue 传递为真。然后它继续按常规计划执行。

ScheduleStatus.Last:

  • 第一次运行时会设置为default(DateTime)
  • 如果它过期了,那将是你的函数最后一次执行
  • 否则它是最后一次执行,四舍五入到最近的计划执行

ScheduleStatus.Next:

  • 下一个计划执行时间,通常大约是当前时间,除非执行已过期,在这种情况下它会在过去。

ScheduleStatus.LastUpdated:

  • 据我所知,这与 ScheduleStatus.Last 相同,但如果是第一次执行,它将是 default(DateTime)

【讨论】:

  • 如果它是第一次执行,它将是默认(日期时间),但ScheduleStatus.Last 的行为也是如此。
【解决方案2】:

函数扩展是否使用天蓝色存储保存上次 触发函数的时间并将其与当前执行进行比较 是时候看看它是否错过了执行并将 IsPastDue 设置为 true?

IsPastDue 的默认值为 false。

public TimerInfo(TimerSchedule schedule, ScheduleStatus status, bool isPastDue = false)
{
    Schedule = schedule;
    ScheduleStatus = status;
    IsPastDue = isPastDue;
}

如果函数触发几秒钟,IsPastDue 是否会被设置为 true 或延迟毫秒或仅在它完全错过执行时?

如果计划已过期,则此值为 true。

是 ScheduleStatus.Last 上次触发还是刚刚触发 根据 cron 表达式计算?

取自DateTime.Now(上次执行的时间),不是根据cron表达式计算的。

什么是 ScheduleStatus.LastUpdated 是我上次更改的 cron 表达式?

该值是从与 ScheduleStatus.Last 相同的值中获得的:

            ScheduleStatus = new ScheduleStatus
            {
                Last = adjustedInvocationTime,
                Next = _schedule.GetNextOccurrence(adjustedInvocationTime),
                LastUpdated = adjustedInvocationTime
            };

什么是 Schedule.GetNextOccurrence 返回与 ScheduleStatus.Next 如果我通过 DateTime.Now

因为 ScheduleStatus 是由 Schedule.GetNextOccurrence 提供的值实例化的。

源代码:

https://github.com/Azure/azure-webjobs-sdk-extensions/blob/a3a5a49a64f3592c1eb7c1296086dc83c2011e96/src/WebJobs.Extensions/Extensions/Timers/TimerInfo.cs

https://github.com/Azure/azure-webjobs-sdk-extensions/blob/a3a5a49a64f3592c1eb7c1296086dc83c2011e96/src/WebJobs.Extensions/Extensions/Timers/Listener/TimerListener.cs

请看一下。

【讨论】:

    猜你喜欢
    • 2018-12-27
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多