.NET 5(隔离模式)Azure Functions静态全局变量并发修改影响咨询
结论
你提到的情况不是极小概率事件,只要在同一个宿主进程实例内,是100%会发生的:前一个端点修改的静态全局变量值,一定会被紧随其后执行的同进程内的其他端点读到。
原理说明
你当前使用的是.NET 5+ 对应Azure Functions的隔离工作进程模型,Program.cs中初始化的宿主会在进程存活的全生命周期内,处理所有收到的函数触发请求,无论请求是并行执行还是串行执行,都运行在同一个进程空间中:
- 静态变量的生命周期和进程/AppDomain绑定,只要宿主没有重启、没有触发冷启动拉起新的进程实例,所有请求读写的都是同一块内存地址的静态变量。只要前一个请求完成了对静态变量的修改,后续同进程内的所有请求都会拿到修改后的值。
- 只有当函数触发冷启动,平台新拉起一个独立的宿主进程处理请求时,新进程的静态变量才会重新初始化,和原有进程的静态变量互不影响,但新进程内部的所有请求依然共享该进程内的静态变量。
开发建议
如果你的静态变量需要支持运行时修改,一定要增加线程安全控制,避免并发读写时出现竞态条件、值异常的问题。如果业务场景允许,更推荐通过依赖注入注册单例服务来替代全局静态变量,更便于做生命周期管理和线程安全处理。
内容的提问来源于stack exchange,提问作者Ama
相关产品推荐
相关产品推荐

