gpt4 book ai didi

Azure WebJobs 和线程安全

转载 作者:行者123 更新时间:2023-12-04 22:45:54 26 4
gpt4 key购买 nike

我是 Azure WebJobs 的新手,我有一个基本问题。我有一个部署为 WebJob 的控制台应用程序,本质上控制台应用程序经常使用 static,并且我有一些本地静态变量,如下所示,我会遇到多个线程同时更新这些变量的麻烦吗?网络作业?

class Program
{
private static MyService _service;
private static int _counter;

static void Main()
{
...
}

private static void Method1() { .... }
}

最佳答案

由于您使用 azure-webjobs-sdk 标记了该问题,并且我记得几天前您还有关于 SDK 的另一个问题,因此我假设您的 webjob 使用该 SDK 并且导致了多线程事实上,我们并行运行触发函数。

我的答案的第一部分不一定与网络工作相关:

class Program
{
private static MyService _service;
private static int _counter;

private static readonly object _lock = new object();

// The 3 blocks of code are thread safe by themselves
// but put together, there is no guarantee. Avoid
// multiple locks if you can
private static void Method1()
{
// 1. You can use a lock
lock(_lock)
{
// All the code here will be executed by a single thread.
// If another thread tries to get the lock, it will have
// to wait until the lock is released

_service.DoSomething();
}

// 2. For atomic operations you can use Interlocked
Interlocked.Increment(ref _counter);

// 3. For conditional locking
if (_service.SomeBooleanProperty)
{
lock(_lock)
{
// Check again to see the condition still holds
// because it might have changed between the
// execution of the first if and the lock
if (_service.SomeBooleanProperty)
{
// Execute the non thread safe code
}
}
}
}
}

引用Interlocked

现在我正在谈论 WebJobs SDK:

如果要控制处理的并发度,可以设置Queue.BatchSize 属性。默认值为 16。如果将其设置为 1,则一切都会按顺序运行。请参阅reference这里。如果您遇到多实例并发(同一作业的多个实例)的并发问题,那么 blob 租用就是最佳选择。

关于Azure WebJobs 和线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26194181/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com