为什么我的 continuous azure webjob 运行 功能两次?
Why does my continuous azure webjob run the function twice?
我创建了第一个连续运行的 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,这让我有两个会话同时做同样的事情。第二种方法说它是 "started from Dashboard",尽管我 100% 确信我没有点击任何东西来启动它。
有人经历过类似的事情吗?
我无法解释为什么它会被调用两次,但我认为使用 CRON 计划 (https://azure.microsoft.com/en-us/documentation/articles/web-sites-create-web-jobs/#CreateScheduledCRON) 而不是连续 WebJob 来触发作业会更好。
此外,您似乎没有使用 WebJobs SDK,因此您可以完全跳过它。您的 WebJob 可以像直接执行工作的 Main 一样简单。没有 JobHost,没有异步,而且通常更容易正确。
从 Azure 门户中 WebApp 的“缩放”选项卡将实例计数更改为 1。默认情况下,它设置为 2 个实例,这导致它 运行 两次。
我创建了第一个连续运行的 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,这让我有两个会话同时做同样的事情。第二种方法说它是 "started from Dashboard",尽管我 100% 确信我没有点击任何东西来启动它。
有人经历过类似的事情吗?
我无法解释为什么它会被调用两次,但我认为使用 CRON 计划 (https://azure.microsoft.com/en-us/documentation/articles/web-sites-create-web-jobs/#CreateScheduledCRON) 而不是连续 WebJob 来触发作业会更好。
此外,您似乎没有使用 WebJobs SDK,因此您可以完全跳过它。您的 WebJob 可以像直接执行工作的 Main 一样简单。没有 JobHost,没有异步,而且通常更容易正确。
从 Azure 门户中 WebApp 的“缩放”选项卡将实例计数更改为 1。默认情况下,它设置为 2 个实例,这导致它 运行 两次。