我有一个包含if (table[0] == 1 && table[table.length - 1] == 1) {
//there is a circular cluster
//do your calcs (count the ones from the beggining and from the end, etc...
}
函数的WebJob。他们也有一个TimeTriggerAttribute
,所以他们不会并行执行。
在App Service中部署的一切都按预期工作。
在本地运行时,它确实按预期工作了一段时间,然后作业主机的输出报告:
应用了开发设置
找到以下功能:
MyNamespace.WebJobs.Functions.MyFunctionAsync
无法获取Singleton锁(bd99766f202e4ac4ba230557b7180bd2 / MyNamespace.WebJobs.Functions.MyFuncitonAsync.Listener)。
我删除了singleton属性,但消息仍然显示。我还重新构建了项目并重新启动了机器。什么都没有帮助。
我重命名了该功能,并按预期再次安排。现在我也可以重新添加SingletonAttribute
,一切都按预期工作。当我将其重命名为原始版本时,错误会恢复。
为了能够从作业主机再次获取锁定,我该怎么办?
答案 0 :(得分:3)
通过阅读this article,我发现在我设置的SingletonAttribute
之上,TimeTriggerAttribute
在幕后使用了另一个。谢谢Janley Zhang。
默认情况下,主机的ID在部署中保持不变。因此,当使用相同存储帐户的多个开发人员在本地执行代码时,他们会尝试获取相同的blob租约,而只有第一个才能成功。
我最终为每个开发人员使用了不同的主机ID,例如
if (jobHostConfiguration.IsDevelopment)
{
jobHostConfiguration.UseDevelopmentSettings();
jobHostConfiguration.HostId = Environment.UserName.ToLowerInvariant();
}