我工作在一个应用程序与前端角6和后端.net核心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();
它总是等待存储过程完成,以便继续执行代码。
谢谢您!
1条答案
按热度按时间kninwzqo1#
您可以通过使用后台服务器来完成这些任务。
在每个请求中启动一个新的后台任务
return
后台任务执行存储过程