调用存储过程,不等待响应

Call stored procedure and don't wait for the response

我找不到关于此类问题的任何最新帖子。所以,再问这个。

我正在使用 ASP.NET MVC、petapoco ORM 将值保存到数据库中。每当我保存实体时,我都会为搜索功能生成元标记并将其存储在不同的 table 中。该存储过程执行大约需要 5 秒。

这是我的问题:我不想等待执行完成。所以尝试使用异步和等待。但我无法让它发挥作用。我们是否需要异步 petapoco 数据库调用才能使其正常工作,或者仅使用 async 关键字就足够了。在每个教程中,我都在异步上观看了他们在异步函数中使用异步内置函数。所以我不确定如何为这个要求设置异步。有什么建议吗?

public ActionResult Save(entityModel model)
{
    //save model
    SaveEntity(model);

    //Generate metatag and store it in separate table.
    GenerateMetatag(model.id);

    return view(model);
}

public void GenerateMetatag(int id)
{
    //call stored procedure
}

谢谢

如果您重组代码以使用 async/await,您可以选择不等待任务,然后在后台继续 运行。

但是,这样做有几个危险。

首先,如果抛出异常,则没有 return 异常的任务句柄,并且调用代码不会意识到该异常。

其次,如果 IIS 实例在执行过程中重启,您的任务就会丢失。对于 ASP.NET 上下文,这不一定是非典型的,但不能完全保证完全执行。

第三,有点迷茫和出乎意料。它可能会导致可维护性问题。

如果可能的话,最好将后台处理移动到外部队列之类的东西,因为如果出现暂时性故障,您可以安全地重试该操作。在 ASP.NET 中从不推荐长期 运行ning 后台任务。如果那不可能,则可能需要考虑优化数据库调用的性能,或者最后,简单地阻止响应直到查询完成。