in src/WebJobs.Extensions/Extensions/Timers/Scheduling/TimerSchedule.cs [61:99]
internal static TimerSchedule Create(TimerTriggerAttribute attribute, INameResolver nameResolver, ILogger logger)
{
TimerSchedule schedule = null;
if (!string.IsNullOrEmpty(attribute.ScheduleExpression))
{
string resolvedExpression = nameResolver.ResolveWholeString(attribute.ScheduleExpression);
if (CronSchedule.TryCreate(resolvedExpression, logger, out CronSchedule cronSchedule))
{
schedule = cronSchedule;
if (attribute.UseMonitor && ShouldDisableScheduleMonitor(cronSchedule, DateTime.Now))
{
logger.LogDebug("UseMonitor changed to false based on schedule frequency.");
attribute.UseMonitor = false;
}
}
else if (TimeSpan.TryParse(resolvedExpression, out TimeSpan periodTimespan))
{
schedule = new ConstantSchedule(periodTimespan);
if (attribute.UseMonitor && periodTimespan.TotalMinutes < 1)
{
// for very frequent constant schedules, we want to disable persistence
logger.LogDebug("UseMonitor changed to false based on schedule frequency.");
attribute.UseMonitor = false;
}
}
else
{
throw new ArgumentException(string.Format("The schedule expression '{0}' was not recognized as a valid cron expression or timespan string.", resolvedExpression));
}
}
else
{
schedule = (TimerSchedule)Activator.CreateInstance(attribute.ScheduleType);
}
return schedule;
}