【发布时间】:2019-08-01 01:01:56
【问题描述】:
假设我有一个常规网站,没有前端框架,只有普通的旧表单、按钮和导航链接,我使用纯 JavaScript 调用 webAPI 来保存表单、获取数据等。
我的 WebAPI 使用取消令牌。
什么会导致请求被取消,因此将取消的令牌发送到我的 webAPI 项目。
我知道我可以手动中止请求或者如果有超时,但还有哪些其他因素会导致取消发生?
我主要担心的是,如果用户填写了一个大表格,并且无论出于何种原因,保存表格的 api 请求需要很长时间,是否会离开页面,关闭浏览器/选项卡调用取消和我的数据库更新不会完成?
【问题讨论】:
-
如果用户在忙的时候刷新页面,
CancellationToken将被设置,如果你的 db 操作仍在进行,它将被请求取消并假设 Sql Server,除非它是在事务中,它不会回滚。不确定是否关闭标签,但很可能也会设置令牌。 -
不,一旦数据库正在进行中,如果端点处理取消令牌并且前端手动发送取消令牌,它将取消。离开不会导致前端向任何打开的长时间运行的 api 请求发送取消令牌。我会假设刷新也不会取消请求,而是排队另一个请求,除非这是从 js 手动处理的。
-
如果使用 sql server,另一个问题可能是您的命令超时。我认为默认情况下它是 30 秒,所以如果您的查询需要更长的时间来保存,那么您可能会遇到超时问题,但保存表单需要很长时间。
标签: c# asp.net-core-webapi cancellationtokensource