我正在开发一个基于Azure Functions的项目,我有一个带缓冲区的静态助手类(私有静态ConcurrentDictionary),它保存了一些在执行结束时要处理的项目列表,问题是这个缓冲区将在多个正在运行的实例之间共享?
答案 0 :(得分:3)
取决于。
最常见的是,多个函数执行将在同一个实例上运行。意思是相同的.NET进程和应用程序域,因此它们将共享您的静态字典。
如果您的Function App在单个实例上处理的请求太多,则会创建第二个实例,并且它不会与第一个实例共享任何内容。因此,在这种情况下,您将拥有2个(以及3个,4个N,如果需要)字典。
任何这些实例也可能随时消失,因此您无法在执行之间可靠地存储字典中的任何内容。你可以用最好的努力"来做到这一点,例如缓存数据。
答案 1 :(得分:0)
每次调用Azure函数时,它们不一定在同一台机器上运行,这意味着共享内存将是易失性的,因为未来的调用可能会在全新的机器上发生。
理想情况下,设计无状态的东西并使用更适合稍后排队任务的技术,例如Azure队列。
如果你必须保留一些状态,请把它放在更永久的位置,例如%HOME%
目录或存储。