Azure Function Singleton 服务线程安全吗?

Azure Function Singleton Service thread Safe?

我正在使用 Azure-functions,我有一个 class 在 DI 配置中配置为单例,class 公开了 2 个方法:

public void methodA(out objectA)
{
  ...
  methodB(out objectA.objectB)
  objectA.xxx = ....
  ...
}

public void methodB(out objectB)
{
  ...
  objectB = ...
}

看了单例之后,我的理解是它会像一个全局变量。因此,我怀疑 AF 的一个实例可能会调用 methodA,而 AF 的另一个实例可能会调用 methodB 并覆盖在第一个函数上设置的值 objectA.objectB...

我试图通过单元测试来证明这一点。

public void Multithread_Test()
{
    ...
    singletonClass.methodA(out objectA);
    ...
    singletonClass.methodB(out objectB);
    ...
    Assert.AreEqual(objectB, objectA.objectB);
}

这没有用,我在测试中看到至少 2 个问题:

  1. 首先,methodA的调用在methodB的调用开始之前完成,这里是同步调用的(我没有多个AF实例)。

  2. 其次,DI 容器在这里并没有真正起作用,所以通过使用相同的 singletonClass 实例,我可能没有做同样的事情,认为 DI 容器确实...

更新:

现在我正在尝试:

        public void Multithread_Test()
        {
            ...
            Parallel.Invoke(
                () =>
                    {
                        singletonClass.methodA(out objectA);
                        Assert.AreEqual(objectA.objectB, expectedObjectB);
                        //expectedObjectB != expectedObjectC
                    },
                () => {
                        singletonClass.methodB(out objectC)
                        Assert.AreEqual(objectC, expectedObjectC);
                        //expectedObjectB != expectedObjectC
                      }
                );

        }

我还在方法 B 的函数调用之后添加了一个 ThreadSleep,但结果似乎指向一切正常,没有覆盖...

我的 question/s 是:

没有状态的单例不会有任何线程安全问题