C# 调用存储过程和don';不要等待答复

C# 调用存储过程和don';不要等待答复,c#,asynchronous,async-await,petapoco,C#,Asynchronous,Async Await,Petapoco,我找不到任何关于这类问题的最新帖子。所以,再问一次 我正在使用ASP.NET MVC、petapoco ORM将值保存到数据库中。每当我保存实体时,我都会为搜索功能生成一个元标记,并将其存储在不同的表中。该存储过程大约需要5秒钟才能执行 我的问题是:我不想等待执行完成。因此,尝试使用异步并等待。但我不能让它工作。我们需要异步petapoco数据库调用才能使其工作,还是只需要async关键字就足够了。在每个教程中,我都观察了异步函数,他们在异步函数中使用异步内置函数。因此,我不确定如何为这个需求设

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

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

我的问题是:我不想等待执行完成。因此,尝试使用异步并等待。但我不能让它工作。我们需要异步petapoco数据库调用才能使其工作,还是只需要async关键字就足够了。在每个教程中,我都观察了异步函数,他们在异步函数中使用异步内置函数。因此,我不确定如何为这个需求设置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,那么您可以选择不等待任务,然后继续在后台运行

然而,这有几个危险

首先,如果抛出异常,则没有任务句柄可将该异常返回给,调用代码也不会知道该异常

第二,如果IIS实例在执行中间重新启动,则任务丢失。对于ASP.NET上下文来说,这不一定是非典型的,但不能完全保证执行的完整性

第三,这有点令人困惑和意外。这可能会导致以后的可维护性问题


如果可能,最好将后台处理移到类似外部队列的位置,因为如果出现暂时性故障,您可以安全地重试该操作。ASP.NET中从不建议长时间运行的后台任务。如果这是不可能的,那么可能需要研究优化数据库调用的性能,或者最后,简单地阻止响应,直到查询完成。

谢谢@David的解释。我会考虑这些建议。您能给我一个代码示例,告诉我如何重新构造为async并等待吗?@Nalluri您还没有为当前调用提供任何类型的代码。如果你不知道自己已经在做什么,就很难指导你。