我想只调用 SQL Server 而不是等待返回。我有一个从存储过程中导入的实体函数,我想在 Entity Framework 6.0.0-rc1 中以这种方式异步调用它。这可能吗?语法是什么?
Entity Function: RecalculateBudgetNumbers(int id)
我想只调用 SQL Server 而不是等待返回。我有一个从存储过程中导入的实体函数,我想在 Entity Framework 6.0.0-rc1 中以这种方式异步调用它。这可能吗?语法是什么?
Entity Function: RecalculateBudgetNumbers(int id)
启动一个新Task
的创建新数据上下文并调用该函数的新函数。只是不要等待/等待该任务。让它自行运行完成。
确保记录错误。不要吞下异常,因为它们可能是您想知道的错误。
在 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);
}
}
还有我的测试(我在 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));
}