我正在开发一个基于 Azure Functions 的项目,我有一个带有缓冲区的静态帮助器类(私有静态 ConcurrentDictionary),其中包含一些要在执行结束时处理的项目列表,问题是这个缓冲区将被共享在多个正在运行的实例之间?
2 回答
郎朗坤
TA贡献1921条经验 获得超9个赞
这取决于。
最常见的是,函数的多次执行将在同一个实例上运行。意味着相同的 .NET 进程和应用程序域,因此它们将共享您的静态字典。
如果您的 Function App 在单个实例上处理的请求过多,则会创建第二个实例,并且不会与第一个实例共享任何内容。因此,在这种情况下,您将拥有 2 个(如果需要,还有 3、4、N 个)词典。
这些实例中的任何一个也可能随时消失,因此您无法在两次执行之间可靠地在字典中存储任何内容。您可以“尽最大努力”做到这一点,例如缓存数据。
红颜莎娜
TA贡献1842条经验 获得超12个赞
Azure Functions 不一定每次被调用时都在同一台机器上运行,这意味着共享内存将是不稳定的,因为未来的调用可能会在全新的机器上发生。
理想情况下,将事物设计为无状态并使用更适合稍后将任务排队的技术,例如 Azure 队列。
如果您必须保持某种状态,请将其放在更永久的地方,例如%HOME%
目录或存储中。
- 2 回答
- 0 关注
- 110 浏览
添加回答
举报
0/150
提交
取消