C# 如何在EF6 async中启动实体存储过程而不等待返回?

C# 如何在EF6 async中启动实体存储过程而不等待返回?,c#,entity-framework,visual-studio-2012,.net-4.5,async-await,C#,Entity Framework,Visual Studio 2012,.net 4.5,Async Await,我只想将一个调用转移到SQL Server,而不是等待返回。我有一个从存储过程导入的实体函数,我希望在EntityFramework6.0.0-rc1中以这种方式异步调用该函数。这可能吗?语法是什么 Entity Function: RecalculateBudgetNumbers(int id) 启动一个新的任务,该任务创建一个新的数据上下文并调用该函数。不要等待那项任务。让它自己完成 确保记录错误。不要接受异常,因为它们可能是您想要了解的bug 在ASP.NET设置中,请注意工作进程可以随

我只想将一个调用转移到SQL Server,而不是等待返回。我有一个从存储过程导入的实体函数,我希望在EntityFramework6.0.0-rc1中以这种方式异步调用该函数。这可能吗?语法是什么

Entity Function: RecalculateBudgetNumbers(int id)

启动一个新的
任务
,该任务创建一个新的数据上下文并调用该函数。不要等待那项任务。让它自己完成

确保记录错误。不要接受异常,因为它们可能是您想要了解的bug


在ASP.NET设置中,请注意工作进程可以随时循环,因此您的后台工作可能会突然消失(或被取消)。

啊哈。我在这片土地上呆得太久了。谢谢你的提示。这是对我有用的东西。你觉得这有什么问题吗

    /// <summary>
    /// kicks off the LONG RUNNING calculations on a budget to regenerate all pre-cooked numbers.
    /// </summary>
    /// <param name="budgetId">Budget Id</param>
    public async System.Threading.Tasks.Task RecalculateBudgetNumbersAsync(int budgetId)
    {
        await System.Threading.Tasks.Task.Factory.StartNew(() => RecalculateBudgetNumbers(budgetId));
    }

    public static void RecalculateBudgetNumbers(int budgetId)
    {
        //this is static so we don't use the unit of work..
        using (BMTContext ctx = new BMTContext())
        {
            ctx.UpdateLifeOfBudgetNumbers(budgetId);                
            ctx.UpdateIntervalNumbers(budgetId);                
            ctx.UpdateIntervalActivityNumbers(budgetId);
            ctx.UpdateLifeOfBudgetActivityNumbers(budgetId);
        }
    }
根据Matt Smith和Usr的建议,我将
RecreacteBudgetNumbersAsync
更改为此。我希望这就是他们的意思:

    public void RecalculateBudgetNumbersAsync(int budgetId)
    {
        System.Threading.Tasks.Task.Factory.StartNew(() => RecalculateBudgetNumbers(budgetId));
    }

不要停留在实体框架上!您可以使用这些异步方法,就像您可以使用其他异步方法一样。(Task.Run,Thread,async(从4.5开始))不需要
async
/
wait
中的
关键字重新计算预算数字同步
。删除它们,您将拥有同等的功能。一个问题-释放主线程并启动新线程不会降低性能吗!?生成新线程,然后在新线程完成后在主线程上恢复,这似乎会带来开销。是吗?我加了一些代码。当我尝试在RecalculateBudgetNumbersAsync中删除Wait时,VS会给我一个警告:因为此调用未被等待,所以当前方法的执行将在调用完成之前继续。考虑将“等待”操作符应用到调用的结果。我如何让它自己跑出来而不等待返回?@usr花了很多时间试图让我的示例使用不同的测试。我的异步需要包括使用dbcontext保存。您关于使用新数据上下文的评论帮助很大。谢谢
    public void RecalculateBudgetNumbersAsync(int budgetId)
    {
        System.Threading.Tasks.Task.Factory.StartNew(() => RecalculateBudgetNumbers(budgetId));
    }