调用存储过程,不等待响应
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 后台任务。如果那不可能,则可能需要考虑优化数据库调用的性能,或者最后,简单地阻止响应直到查询完成。
我找不到关于此类问题的任何最新帖子。所以,再问这个。
我正在使用 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 后台任务。如果那不可能,则可能需要考虑优化数据库调用的性能,或者最后,简单地阻止响应直到查询完成。