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 运行时也是如此。相应地设计是我的建议。
静态全局变量通常不是一个好主意。特别是在这种情况下,您无法可靠地预测会发生什么。由于动态缩放,可以终止进程,可以启动/关闭可能跨越多台机器的新实例。所以不同的执行可以看到静态变量的不同值。
同样,您应该以不必担心底层机制的方式设计函数,否则代码和托管环境之间的耦合会非常紧密。
对于 .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 运行时也是如此。相应地设计是我的建议。
静态全局变量通常不是一个好主意。特别是在这种情况下,您无法可靠地预测会发生什么。由于动态缩放,可以终止进程,可以启动/关闭可能跨越多台机器的新实例。所以不同的执行可以看到静态变量的不同值。
同样,您应该以不必担心底层机制的方式设计函数,否则代码和托管环境之间的耦合会非常紧密。