如何启动EF6异步中的实体存储过程而不等待返回?

我想直接调用SQL Server而不是等待返回。 我有一个来自存储过程的导入实体函数,我想在Entity Framework 6.0.0-rc1中以这种方式异步调用。 这可能吗? 语法是什么?

Entity Function: RecalculateBudgetNumbers(int id) 

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

确保记录错误。 不要吞下exception,因为它们可能是您想要了解的错误。

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

啊。 我在entity framework领域的时间太长了。 谢谢你的提示。 这对我有用。 你觉得这有什么问题吗?

  ///  /// kicks off the LONG RUNNING calculations on a budget to regenerate all pre-cooked numbers. ///  /// Budget Id 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); } } 

我的测试(我在Visual Studio 2012中,所以我可以进行异步测试)。

  [TestMethod] public async System.Threading.Tasks.Task RecalculateBudgetNumbersAsyncTest() { System.Diagnostics.Stopwatch timer = new System.Diagnostics.Stopwatch(); timer.Start(); await repo.RecalculateBudgetNumbersAsync(budgetId); System.Console.WriteLine("RecalculateBudgetNumbersAsyncTest milliseconds: " + timer.ElapsedMilliseconds.ToString()); } 

根据Matt Smith和Usr的建议,我将RecalculateBudgetNumbersAsync更改为此。 我希望这就是他们的意思:

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