c# - 在 .net core WebAPI 项目中,哪些事件会导致 http 请求被取消?
问题描述
假设我有一个普通的网站,没有前端框架,只有普通的旧表单、按钮和导航链接,我使用纯 JavaScript 调用 webAPI 来保存表单、获取数据等。
我的 WebAPI 使用取消令牌。
什么会导致请求被取消,因此将取消的令牌发送到我的 webAPI 项目。
我知道我可以手动中止请求或者如果有超时,但还有什么其他事情会导致取消发生?
我主要担心的是,如果用户填写了一个大表格,并且无论出于何种原因,保存表格的 api 请求需要很长时间,是否会离开页面,关闭浏览器/选项卡调用取消,而我的数据库更新不会完全的?
解决方案
不等待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
它。您的控制器方法将返回,DI 将处理SomeProcessor
类杀死您的逻辑。在日志中,您将看到它为OperationCanceledException
.
推荐阅读
- javascript - 如何使用 Three.js 和 Mesh 数据渲染 3D 形状
- visual-studio-code - 如何忽略非差异编辑器中前导/尾随空格的变化?
- php - Larvel Sail:在 Apple Silicon M1 上为现有应用程序安装 Composer 依赖项失败
- android - 为什么 Log.d() 和 Log.v() 不打印
- html - 如何在焦点上使用 Primefaces 更新文本字段的值?
- html - 如何忽略段落中的标签?
- python - 当我尝试在 sql 中插入来自 pandas 列的负数时,控制台向我显示错误十进制值不正确
- flutter - Flutter Web 应用程序在引擎加载时显示带有百分比的进度条
- laravel-8 - Laravel 视图:htmlspecialchars() 期望参数 1 为字符串,给定数组
- java - Java 中 Dart 的 StreamController 等价物是什么?