Azure Functions 与 .Net 5 的并发性(独立)

Concurrency in Azure Function with .Net 5 (isolated)

对于 .Net 5,Azure Functions 需要通过 Program.cs

实例化主机
class Program
{

    static Task Main(string[] args)
    {
        var host = new HostBuilder()
            .ConfigureAppConfiguration(configurationBuilder =>
            {
                configurationBuilder.AddCommandLine(args);
            })
            .ConfigureFunctionsWorkerDefaults()
            .ConfigureServices(services =>
            {
                services.AddLogging();
            })
            .Build();

        return host.RunAsync();
    }

}

如果我要在 Program.cs 中添加一些全局变量(比如静态),以便在执行期间更改全局变量值时,Azure Function 项目中的任何端点都可以访问它们在这些端点之一中,此更新是否有可能(甚至很小)传播到紧随其后执行的另一个端点的执行中?我很难理解主机在多大程度上是并发的。

这些是有用的读物​​,但我没有找到我要找的东西:

将 Azure Functions 视为无状态工作者。如果您希望它们具有状态,请使用持久实体或外部存储。实现可以更改,甚至底层 Azure Functions 运行时也是如此。相应地设计是我的建议。

静态全局变量通常不是一个好主意。特别是在这种情况下,您无法可靠地预测会发生什么。由于动态缩放,可以终止进程,可以启动/关闭可能跨越多台机器的新实例。所以不同的执行可以看到静态变量的不同值。

同样,您应该以不必担心底层机制的方式设计函数,否则代码和托管环境之间的耦合会非常紧密。