经过大量挖掘,我意识到这可以通过SDK扩展类TimerSchedule
来完成。
对此,您需要一个可以用于多个触发器的基类。
class CustomTimerTriggerBase: TimerSchedule
{
TimeSpan timer;
public CustomTimerTriggerBase(string triggerConfigKey)
{
timer=TimeSpan.Parse(ConfigurationManager.AppSettings[triggerConfigKey]);
}
public override DateTime GetNextOccurrence(DateTime now)
{
return now.Add(timer);
}
}
使用该基地产生的计时器...
public sealed class FooTimer : CustomTimerTriggerBase
{
public FooTimer() : base("FooTimerKey") {}
}
在你的App.config有一个关键的 “FooTimer”
<add key="FooTimerKey" value="00:02:00" />
使用您webjob这个FooTimer类功能。
public void foo([TimerTrigger(typeof(FooTimer)] TimerInfo timer)
现在,您只需更改应用配置中的值,而不是重新部署代码。 注意:由于您使用Timespan进行解析,因此可以使用TimeSpan格式中定义的任何格式的字符串。
感谢您的回答。我一直在寻找一种更可配置的方式,而不仅仅是每周或每日安排。我想通过内置的Azure SDK的'TimerSchedule'扩展名来实现这一点。它与'WeeklyScedule'和'DailySchedule'基本相同,具有更多控制权。 –