问题分析: 1. GetOrAdd 在并发时可能创建多个 Value 2. 两个请求同时进入 GetPriceAsync,都检查内存缓存未命中 3. 然后同时查数据库,导致连接冲突 解决方案: 1. 使用 Lazy<Task<T>> 确保 Value Factory 只执行一次 2. 把整个流程(查数据库缓存 → 获取价格)放在 Lazy 里 3. 内存缓存命中时快速返回,不进入 Lazy 流程: - 内存缓存命中 → 直接返回 - 内存缓存未命中 → 进入 Lazy(只执行一次) - 查数据库缓存 → 命中则返回 - 数据库缓存未命中 → 从数据源获取 |
||
|---|---|---|
| .. | ||
| Services | ||
| StrategyEngine | ||
| AssetManager.Infrastructure.csproj | ||