【问题标题】:Call static method with Azure WebJobs使用 Azure WebJobs 调用静态方法
【发布时间】:2016-06-28 07:15:54
【问题描述】:

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

每个 web-job 可以同时访问一个方法。由于我们使用的是静态类,它会在堆中创建单个内存。每个网络作业都包含该静态类的参考值。我的问题是,它会产生任何问题吗?

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

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

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

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

             }

            //Acessing values through this context
        }
    }

【问题讨论】:

  • 真的取决于你想要达到的目标。 C# 也有异步/等待模式。如果你可以在这里发布你的代码会更容易。干杯。
  • @Thomas 已更新...
  • Webjobs 不会等待访问您的静态方法。他们将同时调用它。
  • 你能回答一些澄清问题来帮助我们吗? 1. 您只是将控制台应用程序作为 Web 作业运行还是使用 SDK? 2. 您的网站的多个实例怎么样 - 您是否打算向外扩展?
  • @JasonHaley 1.我们正在使用 sdk 进行网络作业。 2.关于多个实例,是的,我们在 azure 中创建同一订阅下的多个网站实例。

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


【解决方案1】:

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

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

“每个网络作业可以同时访问一个方法” - 是的,但它们将在不同的进程中,所以在这种情况下你会很安全。

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

【讨论】:

  • 我需要从你的回答中得到更多的澄清......因为你提到 webjobs 作为一个进程工作,每个 webjobs 将创建自己的内存并拥有自己的静态类实例(指静态类内存分配在进程内存(网络作业内存))。所以它是安全的。对吗?
  • 通过查看 Kudu 代码,我觉得 webjob 获得了一个全新的 cmd.exe 进程。 webjob 目录设置为 ProcessStartInfo,包装然后启动。这让我相信网站和 webjobs 之间没有共享内存。 ProcessWrapper.cs 包装了底层的 Process 并从这个类开始:github.com/projectkudu/kudu/blob/master/Kudu.Core/…。 Process是在Executable.cs类方法CreateProcess()中创建的github.com/projectkudu/kudu/blob/master/Kudu.Core/…
  • 非常感谢...你是对的,每个 webjobs 都在不同的进程中运行,所以它是线程安全的。
【解决方案2】:

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

IS Azure Webjobs have its own memory allocation?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-21
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    相关资源
    最近更新 更多