Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Azure WebJobs调用静态方法_C#_Multithreading_Azure_Thread Safety_Azure Webjobs - Fatal编程技术网

C# 使用Azure WebJobs调用静态方法

C# 使用Azure WebJobs调用静态方法,c#,multithreading,azure,thread-safety,azure-webjobs,C#,Multithreading,Azure,Thread Safety,Azure Webjobs,我已经创建了一个由静态类组成的dll。我在azure中创建和部署的web作业(webjob1、webjob2等)中引用了它们 每个web作业可以同时访问一个方法。因为我们使用的是静态类,所以它将在堆中创建单个内存。每个web作业都包含该静态类的引用值。我的问题是,这会产生任何问题吗 据我所知,C#以同步方式工作。因此,每个web作业将在队列中等待以访问静态类的函数。因此,对该静态类的变量所做的任何更改都将反映在其他WebJob上,因为该静态类具有独立内存 如果我的假设是正确的,为什么我们要保留这

我已经创建了一个由静态类组成的dll。我在azure中创建和部署的web作业(webjob1、webjob2等)中引用了它们

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

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

如果我的假设是正确的,为什么我们要保留这样一个静态的helper类而不是我们可以实例化和使用它的普通类呢

我创建这样的静态类是为了从我的数据库中获得一些细节

public static class StaticHelper
    {
        public static string GetValue()
        {
            using(IDBContext _DbContext = new sampleDBContext())
            {

             }

            //Acessing values through this context
        }
    }

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

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

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


如果这回答了您的问题,那么更多的细节实际上是学习.net和多个进程如何处理静态逻辑(不是特定于webjobs)。我将从Jeffry Richter开始学习这个细节。

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

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

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


如果这回答了您的问题,那么更多的细节实际上是学习.net和多个进程如何处理静态逻辑(不是特定于webjobs)。我将从Jeffry Richter开始了解这个细节。

每个WebJob都在其自己的进程中运行,这与WebApp的进程(w3wp)不同。因此,它们都有自己的静态变量副本


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


这取决于你想要达到的目标。C#还具有异步/等待模式。如果你能在这里发布你的代码,那就容易多了。干杯。@Thomas已经更新了…Webjobs不会等待访问您的静态方法。他们将同时召开会议。你能回答一些澄清问题来帮助我们吗?1.您只是将控制台应用程序作为webjob运行,还是使用SDK?2.您的网站的多个实例如何?您是否打算扩展?@JasonHaley 1。我们正在使用sdk进行webjobs。2.关于多个实例,是的,我们正在azure的同一订阅下创建多个网站实例。这取决于您尝试实现的目标。C#还具有异步/等待模式。如果你能在这里发布你的代码,那就容易多了。干杯。@Thomas已经更新了…Webjobs不会等待访问您的静态方法。他们将同时召开会议。你能回答一些澄清问题来帮助我们吗?1.您只是将控制台应用程序作为webjob运行,还是使用SDK?2.您的网站的多个实例如何?您是否打算扩展?@JasonHaley 1。我们正在使用sdk进行webjobs。2.关于多个实例,是的,我们在azure的同一订阅下创建了多个网站实例。我需要从您的回答中得到更多的澄清…因为您提到的是作为一个进程工作的webjobs,每个webjobs都将创建自己的内存并拥有自己的静态类实例(指在进程内存(webjob内存)下分配的静态类内存)。这样就安全了。对吗?通过查看Kudu代码,我觉得webjob获得了一个全新的cmd.exe进程。webjob目录被设置为ProcessStartInfo,包装后启动。这让我相信站点和webjobs之间没有共享内存。ProcessWrapper.cs包装了底层进程并在此类中启动:。该进程是在可执行文件中创建的。cs类方法CreateProcess()中非常感谢您…您是对的,每个webjobs都在不同的进程中运行,因此它将是线程安全的。我需要从您的回答中得到更多的澄清…因为您提到webjobs作为一个进程工作,每个webjobs都将创建自己的内存并有自己的静态类实例(指在进程内存(webjob内存)下分配的静态类内存)。这样就安全了。对吗?通过查看Kudu代码,我觉得webjob获得了一个全新的cmd.exe进程。webjob目录被设置为ProcessStartInfo,包装后启动。这让我相信站点和webjobs之间没有共享内存。ProcessWrapper.cs包装了底层进程并在此类中开始:。该进程是在Executable.cs类方法CreateProcess()中创建的。非常感谢您……您是对的,每个webjobs都在不同的进程中运行,因此它将是线程安全的。