我有一个常规网站,没有前端框架,只是普通的旧表单,按钮和导航链接,我使用纯JavaScript致电WebApi来保存表单,获取数据等等。
我的webapi使用取消令牌。
是什么导致请求被取消,然后将取消令牌发送到我的WebAPI项目。
我知道我可以手动中止该请求或是否有超时,但是还有哪些其他事情会导致取消发生?
我的主要关心是用户是否填写大型表单,无论出于何种原因,API保存表格的请求要长时间,会导航远离页面,关闭浏览器/TAB调用CAND the cancellation和我的DB Update不会完成吗?
不等待 asyn
方法,调用 async void
方法,试图在释放原始胎面时在其他线程上执行工作。所有这些问题都是发布呼叫者,然后DI处置为您要求的所有类型。例如,您有一个类
public class SomeProcessor
{
public async Task ProcessAsync(string payload)
{
// some code
await Task.Delay(1000); // some async action
// some more code
}
public async void ProcessAsyncVoid(string payload)
{
// some code
await Task.Delay(1000); // some async action
// some more code
}
}
然后,您将其注入控制器,然后以此方式使用:
_processor.ProcessAsync(payload);
或以下:
_processor.ProcessAsyncVoid(payload);
和不是 await
it。您的控制器方法将返回,DI将处置SomeProcessor
类杀死您的逻辑。在日志中,您将其视为OperationCanceledException
。