mysql - 执行存储过程而不等待结果(Angular/.net core 2)
问题描述
我正在使用前端 Angular 6 和后端 .net core 2 的应用程序工作。
我希望,如果在某种情况下,执行存储在数据库(MySQL)中的过程,无论用户继续做什么,都需要几分钟才能执行。我不需要从该过程中收集任何结果。
我如何以这种方式启动它,无论用户做什么都继续运行,即使他关闭了浏览器?
我尝试了几种方法...
[HttpGet]
[Route("Check/{idCheck}")]
public async Task ComprobarDatos(int idCheck)
{
try
{
int? timeout = _context.Database.GetCommandTimeout();
_context.Database.SetCommandTimeout(600);
await _context.Database.ExecuteSqlCommandAsync("call CheckProcess({0});", idCheck)
.ConfigureAwait(false);
if(timeout!= null && timeout > 0)
{
_context.Database.SetCommandTimeout(timeout);
}
}
catch (Exception ex)
{
_logger.LogError("Ocurrió un problema ejecutando el procedimiento CheckProcesscon id {0}: " + ex.Message, idCheck);
}
}
我也试过:
public IActionResult ...
...
_context.Database.ExecuteSqlCommand("call CheckProcess({0});", idCheck);
return Ok();
和:
public IActionResult ...
...
_context.Database.ExecuteSqlCommandAsync("call CheckProcess({0});", idCheck)
.ConfigureAwait(false);
return Ok();
和:
public IActionResult ...
...
_context.Database.ExecuteSqlCommandAsync("call CheckProcess({0});", idCheck)
.ConfigureAwait(true);
return Ok();
它总是等待存储过程完成才能继续执行代码。
谢谢!
解决方案
您可以通过使用后台服务器任务来实现这一点。
- 在每个请求上启动一个新的后台任务和
return
- 后台任务执行存储过程
推荐阅读
- android - 无法在 Android 中打开 pdf
- javascript - Angular 8 Carousel:每张幻灯片上的下载图像按钮
- dart - 如何在 Dart 中将映射写入 YAML 文件
- git - “从 master 创建功能分支”和“从发布分支创建功能分支”之间的区别
- javascript - 如何在新的 HTML 模板中打开来自 youtube 的嵌入视频。我正在使用烧瓶
- python - 图中的并行计算
- json - 如何在 Swift 中使用 Codable 将多个数据保存到本地 json 文件中
- mysql - 从mysql中的另一个表中选择表并按值替换列字段
- excel - 如何根据excel中另一个工作表单元格值的特定值填充单元格背景颜色?
- vue.js - 图标位置在移除位置时自动左右切换:绝对