Azure Web 作业中的信号量

Ide*_*ity 5 azure azure-webjobs azure-functions

我想知道信号量(锁)是否可以在 Azure 函数中工作。我不希望两个单独的网络作业同时运行。网络工作采用相同的应用程序服务计划。

这是我可以用信号量保证的吗?(因为这可以实现跨进程锁定?)

ric*_*sch 3

第一个问题:您谈论的是 Functions 和 WebJobs。哪一个?

如果您的应用服务计划进行任何扩展,信号量将不起作用,因为两个实例可能在两台不同的计算机上启动。好处是:(对于 WebJobs)有一个简单的解决方案。

[Singleton]
public static async Task ProcessImage([BlobTrigger("images")] Stream image)
{
     // Process the image
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,在任何给定时间仅运行 ProcessImage 函数的单个实例。当该函数由添加到图像容器的新图像触发时,运行时将首先尝试获取锁(blob 租约)。一旦获取,在函数执行期间将保持锁定(并且更新 blob 租约),确保不会运行其他实例。如果在该函数运行时触发另一个函数实例,它将等待锁,并定期轮询它。

您可以在此处找到更多信息:Azure WebJobs SDK - Singleton

编辑:
如果您使用的是 Azure Functions:那些基于 TimerTrigger 运行的函数似乎作为 Singletons 运行

定时器触发器支持多实例横向扩展。特定计时器函数的单个实例在所有实例上运行。