Azure timertriggered webjob随机挂起

时间:2018-03-04 17:13:02

标签: c# azure scheduled-tasks azure-webjobs

我想安排一个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();
    }

1 个答案:

答案 0 :(得分:3)

  

关于我做错的任何想法?

根据您的描述,是否无关,是否直接调用代码。根本原因是blob租约(Singleton Lock)的默认时间为 30 秒。

正如Rob Reagan提到你可以设置JobHostConfiguration.Tracing.ConsoleLeve 到了详细。当webjob挂起时,您可以获得信息"无法获取Singleton锁定"

有关详细信息,请参阅此issue

  

当侦听器启动特定的TimerTrigger函数时,blob租约(Singleton Lock)的默认时间为30秒。这是一个锁,确保您的计划函数的任何一个实例都可以随时运行。 如果你杀了你的控制台应用程序,该租约仍将保留,直到它自然过期