C# 跨azure进程锁定多个函数

C# 跨azure进程锁定多个函数,c#,azure,azure-webjobs,C#,Azure,Azure Webjobs,我有两个web作业以单独的web作业名称(分别)运行,它们有时会尝试运行相同的函数(反过来修改数据)。我想确保它们不能同时运行。因为它们运行在两个不同的进程中,所以我不能使用C#lock()机制。我也不能使用[Singleton]属性,因为它们是具有不同名称的独立web作业 你建议怎么处理这个问题?我正在考虑类似于租赁Blob操作(到存储帐户)的事情,但无法获得有关此操作的更多信息 或者我猜是某种类型的阻塞事务?似乎您可以在web作业函数上使用[Singleton]属性,用于多种目的,包括实现更

我有两个web作业以单独的web作业名称(分别)运行,它们有时会尝试运行相同的函数(反过来修改数据)。我想确保它们不能同时运行。因为它们运行在两个不同的进程中,所以我不能使用C#
lock()
机制。我也不能使用
[Singleton]
属性,因为它们是具有不同名称的独立web作业

你建议怎么处理这个问题?我正在考虑类似于租赁Blob操作(到存储帐户)的事情,但无法获得有关此操作的更多信息


或者我猜是某种类型的阻塞事务?

似乎您可以在web作业函数上使用
[Singleton]
属性,用于多种目的,包括实现更细粒度和更粗糙的应用程序

从中,您可以使用
SingletonScope.Host
选项在不同功能之间共享锁,前提是给定的名称相同:

跨不同功能锁定

除了使用作用域为单个函数的单例锁外,还可以声明跨多个函数工作的锁。在本例中,我们展示了两个可以独立触发的函数,但我们希望确保在任何给定时间只运行其中一个:


这将把这些函数限制为一个,从可伸缩性的角度来看,这将是分布式锁的净结果。
[Singleton("ItemsLock", SingletonScope.Host)]
public static void AddItem([QueueTrigger("add-item")] string message)
{
     // Perform the add operation
}

[Singleton("ItemsLock", SingletonScope.Host)]
public static void RemoveItem([QueueTrigger("remove-item")] string message)
{
     // Perform the remove operation
}