我想安排一个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();
}
答案 0 :(得分:3)
关于我做错的任何想法?
根据您的描述,是否与无关,是否直接调用代码。根本原因是blob租约(Singleton Lock)的默认时间为 30 秒。
正如Rob Reagan提到你可以设置JobHostConfiguration.Tracing.ConsoleLeve 到了详细。当webjob挂起时,您可以获得信息"无法获取Singleton锁定" 。
有关详细信息,请参阅此issue。
当侦听器启动特定的TimerTrigger函数时,blob租约(Singleton Lock)的默认时间为30秒。这是一个锁,确保您的计划函数的任何一个实例都可以随时运行。 如果你杀了你的控制台应用程序,该租约仍将保留,直到它自然过期