Comment lancer une procédure stockée d’entité en EF6 asynchrone sans attendre un retour?

Je voudrais simplement émettre un appel sur le serveur SQL et ne pas attendre un retour. J’ai une fonction d’entité imscope d’une procédure stockée que j’aimerais appeler de manière asynchrone de cette façon dans Entity Framework 6.0.0-rc1. Est-ce possible? Quelle est la syntaxe?

Entity Function: RecalculateBudgetNumbers(int id) 

Commencez une nouvelle Task qui crée un nouveau contexte de données et appelle cette fonction. Juste n’attendez pas / attendez cette tâche. Laissez-le courir par lui-même à la fin.

Assurez-vous de consigner les erreurs. N’avalez pas les exceptions, car il peut s’agir de bogues que vous souhaitez connaître.

Dans un paramètre ASP.NET, sachez que le processus de travail peut être recyclé à tout moment, de sorte que votre travail en arrière-plan peut soudainement disparaître (ou être annulé).

Ahh Je suis resté trop longtemps dans Entity Framework. Merci pour les conseils. Voici ce qui a fonctionné pour moi. Voyez-vous des problèmes avec cela?

  ///  /// 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); } } 

Et mon test (je suis dans Visual Studio 2012 pour pouvoir effectuer un test asynchrone).

  [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.ToSsortingng()); } 

Après les suggestions de Matt Smith et Usr, j’ai modifié RecalculateBudgetNumbersAsync en cela. J’espère que c’est ce qu’ils voulaient dire:

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