使用Azure WebJobs调用静态方法

时间:2016-06-28 07:15:55

标签: c# multithreading azure thread-safety azure-webjobs

我创建了一个由静态类组成的dll。我在我的web-jobs(webjob1,webjob2等)中引用它们,并在azure中创建和部署。

每个web作业可以同时访问一个方法。当我们使用静态类时,它将在堆中创建单个内存。每个Web作业都包含该静态类的引用值。我的问题是,它会造成任何问题吗?

根据我的理解,C#以同步方式工作。因此,每个web作业将在队列中等待访问静态类的功能。因此,对该静态类的变量所做的任何更改都将反映在其他webjob上。因为静态类具有独立的内存。

如果我的假设是正确的,为什么我们应该保留这样的静态助手类而不是我们可以实例化并使用它的普通助手类。

我正在创建这样的静态类,以便从我的数据库中获取一些细节。

def Fibonacci(n): 
    return (1/(5**0.5))*((((1+5**0.5)/2)**n)-(((1-5**0.5)/2)**n))

i=0
FibSum = 0
nFib = 0

while (nFib <= 10):

    nFib = Fibonacci(i)

    if(nFib%2==0):
        FibSum += nFib

    i += 1

print FibSum

2 个答案:

答案 0 :(得分:2)

如果我理解正确,你有多个web服务器对dll具有相同的依赖关系。您有该网站的多个实例,并且使用SDK但不使用队列触发器。

每个webjob都将作为自己的进程运行,并且网站的每个实例都可能包含这些webjobs的其他实例(取决于您是否设置了单个实例或多个实例)。

“每个网络作业都可以同时访问某个方法” - 是的但是它们将处于不同的进程中,因此在这种情况下您将是安全的。

如果这回答了你的问题,那么更多的细节就是学习.net和多个进程如何处理静态逻辑(不是特定的webjobs)。我会从杰弗里里希特开始学习这个细节。

答案 1 :(得分:0)

每个WebJob都在自己的进程中运行,这与WebApp的进程(w3wp)不同。所以他们每个人都有自己的静态变量副本。

IS Azure Webjobs have its own memory allocation?