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

Mysql 执行存储过程,不等待结果(Angular/.net core 2),mysql,angular,asp.net-core,Mysql,Angular,Asp.net Core,我在使用前端Angular 6和后端.net core 2的应用程序中工作 我希望,如果有某种情况,执行存储在数据库(MySQL)中的过程,不管用户继续做什么,执行过程都需要几分钟。我不需要从这个过程中收集任何结果 我如何以这种方式启动它,无论用户做什么,即使他关闭了浏览器,也要继续运行 我试过几种方法 [HttpGet] [Route("Check/{idCheck}")] public async Task ComprobarDatos(int idCheck) { tr

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

以及:

它总是等待存储过程完成,以便继续执行代码


谢谢大家!

您可以通过使用

  • 每次请求时,启动一个新的后台任务并返回
  • 后台任务执行存储过程

如果你不想等待,就不要等待。如果不使用
awai
则将调用添加到
ConfigureAwait()
没有意义。这不应该影响方法是否阻塞。另一方面,MySQL的连接器/网络提供程序通过在另一个线程上运行阻塞调用来伪造异步执行。如果搜索源代码,最后它会创建一个委托并使用
.BeginInvoke()
运行它,该委托只会在另一个线程上运行调用。也许这会影响
ConfigurAwait
在这里的行为?可能是。我已经尝试了提供程序Pomelo.EntityFrameworkCore.MySql。它与ExecuteSqlCommand一起工作,但我必须等待存储过程的执行完成,然后才能继续。使用ExecuteSqlCommandAsync,它将继续执行代码,但不执行存储过程。显示以下错误:Microsoft.EntityFrameworkCore.Database.Command:error:callcheckprocess(@p0);System.ObjectDisposedException:无法访问已处置的对象。对象名称:“MySqlConnection”。有些事我做得不对!谢谢你的回复。这一回应是解决这一问题的开端。由于能够在后台排队完成工作对我来说是件好事,所以我遵循了
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();