管理长时API请求的CancellationTokenSource问题及优化疑问
长时数据库查询的CancellationTokenSource管理问题
- 技术栈:Suave.IO Web服务器、Neo4j图数据库、Blazor WebAssembly前端
- 触发场景:用户快速滚动Blazor虚拟化组件的数据列表时,组件会频繁向API发起HttpClient请求,进而触发大量长时图数据库查询,存在数据库事务内存过载风险
- 已尝试的解决逻辑:在异步请求中通过CancellationToken关闭会话并回滚查询,这部分功能可行,但CancellationTokenSource的管理存在问题
- 最初采用Map存储CancellationTokenSource的方案,因异步请求的竞态条件失效,无法正确取消旧请求
- 参考Guro Stron的答案修改代码后,已能实现取消旧请求、保留最后一个请求的效果,但触发20次请求时,仅能在控制台收到3-4次
cancelled iter: x的通知,无法确定是Async.OnCancel未被调用,还是存在其他潜在问题
内容的提问来源于stack exchange,提问作者pilsdumps
相关产品推荐
相关产品推荐

