为什么我的连续azure webjob运行该功能两次?

时间:2016-02-06 22:57:15

标签: azure azure-webjobs azure-webjobssdk

我创造了我的第一个连续运行的azure webjob;

我不太确定这是代码问题,但为了完整起见,这是我的代码:

static void Main()
{
   var host = new JobHost();
   host.CallAsync(typeof(Functions).GetMethod("ProcessMethod"));
   host.RunAndBlock();
}

对于功能:

[NoAutomaticTrigger]
public static async Task ProcessMethod(TextWriter log)
{
   log.WriteLine(DateTime.UtcNow.ToShortTimeString() + ": Started");
   while (true)
   {
       Task.Run(() => RunAllAsync(log));
       await Task.Delay(TimeSpan.FromSeconds(60));
   }
   log.WriteLine(DateTime.UtcNow.ToShortTimeString() + "Shutting down..");
}

请注意,异步任务会触发自己的任务。这是为了确保它们以相同的间隔非常准确地启动。作业本身是下载一个URL,解析并在数据库中输入一些数据,但这不应该与我遇到的多实例问题相关。

我的问题是,一旦这个已经运行了大约5分钟,就会调用第二个ProcessMethod,这让我有两个会话同时做同样的事情。第二种方法说它是“从仪表板开始”,即使我100%自信我没有点击任何东西来启动它。

任何人都有类似的经历吗?

2 个答案:

答案 0 :(得分:4)

在Azure门户中的WebApp的“扩展”选项卡中将实例计数更改为1。默认情况下,它设置为2个实例,导致它运行两次。

答案 1 :(得分:1)

我无法解释为什么它会被调用两次,但我认为使用CRON计划(https://azure.microsoft.com/en-us/documentation/articles/web-sites-create-web-jobs/#CreateScheduledCRON)而不是连续WebJob可以更好地处理触发的作业。

此外,您似乎没有使用WebJobs SDK,因此您可以完全跳过它。您的WebJob可以像直接完成工作的Main一样简单。没有JobHost,没有异步,通常更容易做对。