You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Functions相同输入并行调用返回重复结果问题求助

问题分析与解决方向

针对你遇到的Azure Function并行调用返回重复结果(但数据库已生成新记录)的问题,以下是几个可能的原因及对应的排查/解决方法:

1. Azure Function实例复用导致的静态变量缓存

Azure Function会复用运行实例,如果你在Helper类或者GetRedirectURL方法中使用了静态变量(比如静态的缓存字典、静态的数据库连接对象或查询结果),这些变量会在实例生命周期内保留之前的结果,导致相同参数的请求返回旧值。

排查:检查Helper类的实现,确认是否存在静态字段/属性存储了RedirectURL或查询结果;检查GetRedirectURL方法是否依赖静态资源。

解决:将静态变量改为实例变量,确保每次调用new Helper()时都初始化全新的状态;或者在GetRedirectURL方法中,每次都重新执行数据库查询,不依赖静态缓存。

2. 前端缓存层(APIM/CDN/Front Door)的缓存

如果你的Azure Function前面配置了Azure API管理(APIM)、Front Door或CDN服务,这些服务可能会根据请求URL(含查询字符串)自动缓存响应,即使你在Function返回的响应头中添加了cache-control: no-cache,前端缓存层可能未正确遵循该指令。

排查:检查前端缓存服务的配置,确认对应Function的路径是否开启了缓存规则。

解决:

  • 直接禁用该路径的缓存规则;
  • 在Excel的API请求URL中添加一个唯一的随机参数(比如&nonce={时间戳}),让每个并行请求的URL唯一,绕过缓存层的匹配逻辑。

3. GetRedirectURL方法内部逻辑问题

虽然CampaignUser.TrackingId是唯一值,但GetRedirectURL可能没有正确使用该参数查询最新数据:

  • 查询数据库时使用了错误的条件,导致返回了旧记录;
  • 方法内部实现了本地缓存(比如内存缓存),且缓存未根据TrackingId区分,或者缓存未及时失效。

排查:在GetRedirectURL方法中添加日志,输出传入的TrackingId和查询到的RedirectURL,确认每次调用是否都获取到了对应TrackingId的最新记录;检查是否有缓存逻辑未正确处理唯一标识。

解决:确保GetRedirectURL每次都根据传入的TrackingId执行全新的数据库查询,移除不必要的本地缓存;如果必须使用缓存,确保缓存键是TrackingId的唯一值,且设置合理的过期时间。

4. Excel端的请求缓存

Excel在并行调用外部API时,可能会对相同URL的请求进行缓存复用,导致返回旧结果。

解决:在Excel拼接的查询字符串末尾添加一个动态参数(比如当前时间戳或随机数),例如:

原URL:https://your-function-url/api/xxx?col1=xxx&col2=xxx
修改后:https://your-function-url/api/xxx?col1=xxx&col2=xxx&t=1699999999

这样每个请求的URL唯一,Excel就不会复用缓存的响应。


内容的提问来源于stack exchange,提问作者user1144596

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 23:53:21