执行存储过程,而不等待结果(Angular / .net core 2)

时间:2018-07-12 13:02:59

标签: mysql angular asp.net-core

我正在使用前端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();

并且它总是等待存储过程完成以继续执行代码。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用background server tasks来达到目的。

  • 在每个请求上启动一个新的后台任务,然后return
  • 后台任务执行存储过程