我有一个包含具有TimeTriggerAttribute
函数的WebJob。它们还有一个SingletonAttribute
,因此它们不会并行执行。
部署在应用服务中,一切按预期工作。
在本地运行时,它确实按预期工作了一段时间,然后作业主机的输出报告:
应用了开发设置
找到以下功能:
MyNamespace.WebJobs.Functions.MyFunctionAsync
无法获取单例锁 (bd99766f202e4ac4ba230557b7180bd2/MyNamespace.WebJobs.Functions.MyFuncitonAsync.Listener)。
我删除了单例属性,但消息继续显示。我还重建了项目并重新启动了机器。没有任何帮助。
我重命名了该函数,它再次按预期计划。现在我还可以重新添加SingletonAttribute
,一切都按预期工作。当我将其重命名回原始名称时,错误又回来了。
为了能够再次从作业主机获取锁,我该怎么做?
通过阅读这篇文章,我发现在我设置的SingletonAttribute
之上,TimeTriggerAttribute
在幕后使用了另一个。谢谢张健利。
默认情况下,主机的 ID 在部署中保持不变。因此,当使用同一存储帐户的多个开发人员在本地执行代码时,他们将尝试获取相同的 Blob 租约,并且只有第一个会成功。
我最终为每个开发人员使用了一个不同的主机 ID,例如
if (jobHostConfiguration.IsDevelopment)
{
jobHostConfiguration.UseDevelopmentSettings();
jobHostConfiguration.HostId = Environment.UserName.ToLowerInvariant();
}