我想安排一个timertriggered方法来调用其他方法但不知何故CronJob方法不会运行,如果我用它来调用我自己的方法之一,我只是得到这个控制台输出:“找到以下函数:... ProcessQueueMessage。 ..Functions.CronJob工作主持人开始“
没有其他事情发生几分钟然后它可能会突然开始工作。但是,如果我只使用CronJob()方法运行它自己的Console.WriteLine(“Timer job fired”)语句一切正常。
我一直试图找到这个问题的解决方案好几个小时,但似乎没有人有同样的问题。关于我做错了什么的任何想法?
public static void CronJob([TimerTrigger("*/3 * * * * *", RunOnStartup = true)] TimerInfo timerInfo)
{
Console.WriteLine("Timer job fired! ");
DoTask();
}
private static void DoTask()
{
Console.WriteLine("Doing task...");
}
主要方法:
static void Main()
{
var config = new JobHostConfiguration();
if (config.IsDevelopment)
{
config.UseDevelopmentSettings();
}
var host = new JobHost(config);
config.UseTimers();
// The following code ensures that the WebJob will be running continuously
host.RunAndBlock();
}
关于我做错了什么的任何想法?
根据您的描述,它与您是否直接调用代码无关。根本原因是blob租约(Singleton Lock)的默认时间为30秒。
正如Rob Reagan所说,你可以将JobHostConfiguration.Tracing.ConsoleLeve设置为Verbose。当webjob挂起时,您可以获得“无法获取Singleton锁定”的信息。
有关更多详细信息,请参阅此issue。
当侦听器启动特定的TimerTrigger函数时,blob租约(Singleton Lock)的默认时间为30秒。这是一个锁,确保您的计划函数的任何一个实例都可以随时运行。如果你杀了你的控制台应用程序,该租约仍将保留,直到它自然过期